MongoDB multitenancy (Java): Как переключить базы данных MongoDB с разными учетными данными БД во время выполнения с помощью MongoClient?
Я сталкиваюсь с проблемой, касающейся многопользовательской аренды MongoDB. У меня есть две разные базы данных mongoDB (db1 и db2). Оба имеют разные полномочия.
учетные данные db1:
userName: admin
пароль: passwd
учетные данные db2:
имя пользователя: admin1
пароль: passwd1
Мне нужно переключаться с одной базы данных на другую во время выполнения. У меня есть автоматическое подключение mongoTemplate с учетными данными db1, но теперь я не могу обновить шаблон с учетными данными db2. Это возможно? Если да, то как? Если нет, пожалуйста, сообщите мне любой другой способ переключения баз данных во время выполнения с другими учетными данными.
Обратите внимание, что я знаю о "SimpleMongoDbFactory". Можно расширить "SimpleMongoDbFactory" и переопределить метод "getDb" и передать требуемое dbName в super.getDb ("dbName") для многопользовательской работы. Но это не работает с двумя базами данных с разными учетными данными.
2 ответа
Что делать, если вы создаете MongoCredential
для каждой БД и передать их MongoClient
что вы передаете SimpleMongoDbFactory
MongoCredential credential1 = MongoCredential.createCredential("admin", db1, "password");
MongoCredential credential2 = MongoCredential.createCredential("admin1", db2, "password1");
MongoClient mongoClient = new MongoClient(new ServerAddress(), Arrays.asList(credential1, credential2));
Создайте независимые экземпляры MongoTemplate, каждый со своими учетными данными, и выберите соответствующий во время выполнения.
Каждое соединение устанавливается с использованием учетных данных, поэтому, если вы изменяете их в существующем соединении, вы по существу уничтожаете соединение и создаете новое, и не используете преимущества объединения в пул.