当前位置:   article > 正文

mongodb 关闭连接的注意细节_mongodb closeidleconnections

mongodb closeidleconnections

最近一个API部署到正式环境后,总是过几天后,就报错误:

java.lang.IllegalStateException: this Mongo has been closed\n\tat com.mongodb.DBTCPConnector._checkClosed(DBTCPConnector.java:95)\n\tat com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:233)\n\tat com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216)\n\tat com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:288)\n\tat com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:273)\n\tat com.mongodb.DBCursor._check(DBCursor.java:368)\n\tat com.mongodb.DBCursor._hasNext(DBCursor.java:459)\n\tat com.mongodb.DBCursor.hasNext(DBCursor.java:484)\n\tat
  • 1

一开始我以为是mongodb挂了,可是其他接口访问的很好啊!之前的解决办法是重启服务器就好了。
可是今天又报错了,还是这个错,还是那个API。
看了网上的一个说法:

连续执行2次不同(相同不会)的操作就会爆这样的错误。。。例如:

DBCollection collection= mongo.mongodb("ServerData","Users");

mongo.updata(collection,"id", id,
"state", state, 1);


mongo.insert(collection, ProductKeyWordList, ProductList);//这句就会报错。。。。

解决方法。。。。重新初始化一次。。。。。

关闭的时候要这样关闭。。。。


mongo = new Mongo("localhost", 27017);

mongo.close();

mongo=null;//一定要写这句话,不然系统不会回收,只是关闭了,连接存在。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

主要是看到最后一句,再回过头看看我自己的代码,有这么一句话:

private static DBCollection sharehdResearch = GGMongoOperator.getGGBusinessCollection("t_f10_sharehd_research_01");
  • 1

其中GGMongoOperator.getGGBusinessCollection()方法是我公司自己封装的方法。
里面其实就是mongodb连接数据库的那两步。

1、获取mongo对象
2、通过mongo对象与数据库建立连接
  • 1
  • 2

虽然我在方法里面关闭掉游标,但是根据网上的说法,由于我声明的是static变量,所以连接是依然存在的。
除非我手动mongo = null,或者不再声明为private static 变量。
这里由于建立数据库的连接被公司封装起来啦!所以这里建议不要声明private static 变量
直接放到相应的方法里面,让其随着方法的销毁,一起销毁掉。

我一般选择放到相应的方法里面!让其随着方法调用的结束,而销毁掉。

http://blog.csdn.net/u013066244/article/details/53205550

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/286943
推荐阅读
相关标签
  

闽ICP备14008679号