我有一个应用程序在客户端尝试登录时从 Mongo DB 中查找一个文档。虽然这在大多数情况下都有效,但有时会在“com.mongodb.MongoException$Network: can't call something : ...”下引发超时
一旦请求失败(在预配置的超时之后),下一个请求似乎工作正常,但随后一些其他调用随机失败并出现相同的异常。堆栈跟踪的相关部分是
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 服务器(我的本地环境具有适用于 Ubuntu 12.10 的桌面版本)上运行 JDK 1.7,来自 tomcat。Java 驱动程序版本为 2.10.1。提供以下配置选项
mongoOptions.connectTimeout=5000
mongoOptions.socketTimeout=60000
mongoOptions.socketKeepAlive=true
mongoOptions.maxWaitTime=15000
mongoOptions.autoConnectRetry=true
有什么建议或想法吗?
提前致谢