0

据我了解,每个应用程序只需要一个 MongoClient 实例,因此为了方便起见,我使用此方法扩展了 HttpServlet:

DB getDB(String dbName) throws Exception {
    MongoClient m = (MongoClient)getServletContext().getAttribute("mongo");
    if(m == null) {
        m = new MongoClient();
        getServletContext().setAttribute("mongo",m);
    }
    return m.getDB(dbName);
}

当我运行这段代码时,它工作得很好,我连接并做我需要做的工作,但每次我运行这个特定的 Servlet 时,它似乎都会不断地打开到 mongodb 的新连接:

1 月 26 日星期六 21:31:42 [initandlisten] 接受来自 127.0.0.1:46860 #1 的连接(现在打开 1 个连接)
1 月 26 日星期六 21:31:53 [initandlisten] 接受来自 127.0.0.1:46861 #2 的连接(现在打开 2 个连接)
1 月 26 日星期六 21:32:00 [initandlisten] 接受来自 127.0.0.1:46863 #3 的连接(现在打开 3 个连接)

在我这样做的页面中:

DB db = getDB("foo");
col = db.getCollection("bar");

然后运行一个简单的查询。谁能解释为什么我得到这么多新的连接?我也看过这个 Mongo.Holder 类。这是做我正在做的事情的首选方式吗?

谢谢!

4

2 回答 2

1

MongoDB Java驱动实现了一个连接池,默认维护10个连接。池由驱动程序在内部进行管理。从 servlet 容器到 Mongo 服务器的连接不应超过 10 个。如果您想更改这些默认设置,请查看MongoOptions

于 2013-01-27T09:26:53.933 回答
0

MongoClientOptions 中连接池的默认最大大小从 10 增加到 100,详细的 Javadoc 中有提到:http://api.mongodb.org/java/current/com/mongodb/MongoClientOptions.html#getConnectionsPerHost ()

如果你使用的是 MongoOptions,默认还是 10。

于 2013-01-29T21:18:54.603 回答