繁体   English   中英

如何防止连接池被 mongodb 上的 java 驱动程序关闭?

[英]How to keep the connection pool from closing with a java driver on a mongodb?

我正在从 java 驱动程序 2.12.3 升级到 3.3.0。 奇怪的是,收集池似乎突然“行动起来”了。

我的设置如下:

Connection是在主线程中建立的:

mongoClient = new MongoClient(new MongoClientURI("mongodb://localhost:27017"));
mongoClient.setWriteConcern(new WriteConcern(0, 10)); // deprecated, replace soon
database = mongoClient.getDatabase("Example");
// java.util.logging.Logger.getLogger("org.mongodb.driver").setLevel(Level.SEVERE);

它用于数百个线​​程:

org.bson.Document oldDoc = DBInteractions.readOneFromDb("articles");

使用这样的函数:

static synchronized Document readOneFromDb(String col) {
    return database.getCollection(col).find().limit(1).sort(new Document().append("count", 1)).first();
}

对于每次数据库交互,我都会收到这样的警告:

Sep 26, 2016 2:33:19 PM com.mongodb.diagnostics.logging.JULLogger log
INFORMATION: Closed connection [connectionId{localValue:42, serverValue:248}] to localhost:27017 because the pool has been closed.

看起来好像连接池在一次交互后就关闭了。 但为什么? 很困惑任何人的想法?

https://api.mongodb.com/java/3.1/com/mongodb/MongoClientOptions.html

看看链接。 有几种方法可能可以帮助您。 查看连接连接池的超时相关方法。


编辑:添加了正确答案(在下面的评论中)

MongoClientOptions options = new MongoClientOptions.Builder().socketKeepAlive(true).build(); 
MongoClient client = new MongoClient("host", options);
MongoClientOptions options = new MongoClientOptions.Builder().socketKeepAlive(true).build();

socketKeepAlive 现在已弃用
它现在默认true ,不建议禁用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM