Служба Java, которая подключается к MongoDB в производственной среде, но количество открытых подключений слишком велико. Это влияет на производительность MongoDb, поэтому я придумал решение, обеспечивающее MongoClient экземпляр singleton только один раз, чтобы уменьшить количество подключений.
Вот мой код, это хороший способ предоставить одноэлементный объект из сторонней библиотеки?
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
public class MongoClientFactory {
private static volatile MongoClient instance = null;
private MongoClientFactory() {}
public static MongoClient getInstance(String connectionString) {
if (instance == null) {
synchronized(MongoClientFactory.class) {
if (instance == null) {
instance = MongoClients.create(connectionString);
}
}
}
return instance;
}
}
1 ответ
Я не разбираюсь в синглтоне, но действительно ли connectionString меняется за время жизни приложения? Обычно (я могу ошибаться) эта строка объявляется с final ключевое слово.

из-за разной среды, такой как test, prod и local, для другой строки подключения
— фуат
Да, но после запуска приложения вы, вероятно, не собираетесь менять URL-адрес? Для меня URL-адрес должен быть внутри файла porperties, который отличается для каждого env, поэтому вы можете изменить свой синглтон, чтобы он был построен внутри статического блока.
— Квентин М
да, просто измените подпись функции
— фуат