Закрытие MongoDB Java Connection
Я пытаюсь спроектировать класс подключения Mongo Db, где я устанавливаю MongoClient как статический.
private static MongoClient client = null;
public static DB connectToMongo() throws Exception {
if (null != client) {
return client.getDB(DBNAME);
}
client = new MongoClient(HOST,PORT);
return client.getDB(DBNAME);
}
Мое веб-приложение использует описанный выше метод для подключения к Mongo следующим образом:
db = MongoDBConnection.connectToMongo();
collection = db.getCollection("collectionName");
После выполнения операций с БД я никогда не вызываю закрытое соединение для MongoClient. Класс соединения всегда будет возвращать один и тот же экземпляр MongoClient, который никогда не закрывается. Единственное, что я закрываю, это курсоры.
- Необходимо ли закрывать MongoClient каждый раз, когда мы запрашиваем базу данных? Мой вышеуказанный дизайн действителен?
1 ответ
Вам определенно не следует закрывать MongoClient каждый раз, когда вы запрашиваете базу данных. MongoClient поддерживает пул соединений, который относительно дорог в настройке, поэтому вы захотите повторно использовать экземпляр MongoClient на протяжении всего жизненного цикла вашего веб-приложения.
Еще пара вещей, на которые стоит обратить внимание:
- В методе connectToMongo есть условие гонки. Вам необходимо синхронизировать доступ к этому методу, чтобы обеспечить создание не более одного экземпляра MongoClient.
- Если вы когда-нибудь повторно развернете свое веб-приложение без предварительной перезагрузки сервера приложений, вы должны убедиться, что MongoClient закрыт, когда ваше веб-приложение закрывается. Это можно сделать, например, с помощью ServletContextListener.