Закрытие 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.
Другие вопросы по тегам