mongodb 关闭连接的注意细节

最近一个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

一开始我以为是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;//一定要写这句话,不然系统不会回收,只是关闭了,连接存在。

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

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

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

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

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山鬼谣me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值