从Java驱动程序读取Mongodb随机超时 - 无法调用某些东西

时间:2012-12-27 13:33:29

标签: java mongodb

我有一个应用程序在客户端尝试登录时从Mongo DB中找到一个文档。虽然这大部分时间都有效,但它有时会在“com.mongodb.MongoException $ Network:无法调用某些东西:...”之后抛出超时。

一旦请求失败(在预先配置的超时之后),下一个请求似乎工作正常,但随后一些其他调用随机失败并出现相同的异常。堆栈跟踪的相关部分是

at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:295)
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:257)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:310)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:295)
at com.mongodb.DBCollection.findOne(DBCollection.java:727)
at com.mongodb.DBCollection.findOne(DBCollection.java:669)

我正在使用Spring的MongoTemplate获取一个集合,然后查询它以查找单个文档。我的代码片段将如下所示

BasicDBObject query = new BasicDBObject();
query.put("myIntParam", 283);
DBCollection collection = mongoTemplate.getDb().getCollection(collectionName);
DBObject foundDocument = collection.findOne(query);

相同的mongo模板实例正在应用程序中用于不同集合中的其他读写目的(我认为建议每个应用程序仅使用一个实例)。

问题通常发生在我将应用程序闲置一段时间之后。我正在运行Ubuntu 12.10服务器(我的本地env具有Ubuntu 12.10的桌面版本)和tomcat中的JDK 1.7。 Java驱动程序版本是2.10.1。提供以下配置选项

mongoOptions.connectTimeout=5000
mongoOptions.socketTimeout=60000
mongoOptions.socketKeepAlive=true
mongoOptions.maxWaitTime=15000
mongoOptions.autoConnectRetry=true

有任何建议或想法吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

删除mongoOptions.socketTimeout=60000项,或者捕获超时异常,然后自己处理。