Мне нужен совет о том, как правильно настроить mongoDB для моего веб-приложения, работающего с java. Из учебника по 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;
}
}
И всякий раз, когда мне приходится работать с монго в моем веб-приложении, я внедряю провайдера и получаю тот же экземпляр монго.
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
До сих пор у меня не было никаких проблем, но мне интересно, является ли это хорошей практикой и не столкнусь ли я с какими-либо проблемами, когда количество принятых соединений станет слишком большим.
- Должен ли я также иметь только один экземпляр объекта БД для всего моего приложения?
- Нужно ли мне по-другому настраивать MongoDB для автоматического закрытия соединений через некоторое время? Или мне нужно закрывать соединения вручную? Я кое-что читал об использовании метода close() в Mongo, но я не уверен, когда и нужно ли его вызывать.
Спасибо за совет.