Mongodb Java API在servlet中打开太多连接

时间:2013-01-27 03:23:37

标签: mongodb caching servlets connection

据我所知,每个应用程序只需要一个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的新连接:

Sat Jan 26 21:31:42 [initandlisten] connection accepted from 127.0.0.1:46860 #1 (1 connection now open)
Sat Jan 26 21:31:53 [initandlisten] connection accepted from 127.0.0.1:46861 #2 (2 connections now open)
Sat Jan 26 21:32:00 [initandlisten] connection accepted from 127.0.0.1:46863 #3 (3 connections now open)

在我正在执行此操作的页面中:

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

然后运行一个简单的查询。任何人都可以解释为什么我会得到这么多新的联系?我也看过这个Mongo.Holder课程。这是我做我正在做的事情的首选方式吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

如果您使用的是MongoOptions,则默认值仍为10.