据我了解,每个应用程序只需要一个 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 类。这是做我正在做的事情的首选方式吗?
谢谢!