我正在寻找一些关于为使用 java 运行的 Web 应用程序设置 mongoDB 的正确方法的建议。从 mongoDB 教程中,我了解到我应该只有一个 Mongo 类的实例。
Mongo 类被设计成线程安全的并且在线程之间共享。通常,您只为给定的数据库集群创建 1 个实例并在您的应用程序中使用它。
所以我有一个单例提供者(我正在使用 guice 进行注入)
@Singleton
public class MongoProvider implements Provider<Mongo> {
private Mongo mongo;
public Mongo get() {
if (mongo == null)
mongo = new Mongo("localhost", 27017);
return mongo;
}
}
每当我必须在我的 web 应用程序中使用 mongo 时,我都会注入提供程序并获得相同的 mongo 实例。
public class MyService {
private Provider<Mongo> mongoProvider;
@Inject
private MyService(Provider<Mongo> mongoProvider) {
this.mongoProvider = mongoProvider;
}
public void execute() {
DB db = mongoProvider.get().getDB("mydatabase");
DBCollection coll = db.getCollection("mycollection");
// Do stuff in collection
...
}
}
我觉得奇怪的是,每次我访问我的数据库时,我都会从 mongo 得到这样的日志:
[initandlisten] 接受来自 192.168.1.33:54297 #15 的连接
[initandlisten] 接受来自 192.168.1.33:54299 #16 的连接
到目前为止,我还没有遇到任何问题,但我想知道这是否是一种好习惯,以及当接受的连接数太高时我是否不会遇到任何问题。
- 我的整个应用程序是否也应该只有一个 DB 对象实例?
- 我是否必须以不同的方式配置 MongoDB 以在一段时间后自动关闭连接?还是我必须手动关闭连接?我已经阅读了有关在 Mongo 上使用 close() 方法的内容,但我不确定何时或是否调用它。
谢谢你的建议。