2017-01-03 5 views
5


Я столкнулся с проблемой относительно многопользовательского режима MongoDB. У меня есть две разные базы данных mongoDB (db1 и db2). У них разные учетные данные.MongoDB multitenancy (Java): Как переключить базы данных MongoDB с разными учетными данными БД во время выполнения, используя MongoClient?

DB1 полномочия:
имя_пользователя: администратора
пароль: ПАРОЛЬ

db2 полномочия:
имя_пользователя: Admin1
пароль: passwd1

мне нужно переключаться с одного базы данных для других во время выполнения. У меня есть autwired mongoTemplate с учетными данными db1, но теперь я не могу обновить шаблон с учетными данными db2. Это возможно? Если да, то как? Если нет, сообщите мне другой способ переключить базы данных во время выполнения с разными учетными данными.

Обратите внимание, что мне известно о «SimpleMongoDbFactory». Можно расширить «SimpleMongoDbFactory» и может переопределить метод «getDb» и передать требуемое имя dbName в super.getDb («dbName») для многоуровневости. Но это не работает с двумя базами данных с разными учетными данными.

+0

Почему бы не создать два отдельных шаблона mongo, каждый из которых ссылается на свой собственный simplemongodbfactory? – Veeram

+0

Это будет работать для 2 или фиксированного количества баз данных. Но что, если число баз данных не фиксировано? –

+0

Hi Sumit, у меня есть такое же требование, если вы решили, пожалуйста, назовите меня. –

ответ

4

Что делать, если вы создаете 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)); 
+0

Как этот подход работает с пулами соединений MongoDB? Сколько соединений будет присутствовать одновременно? –

+0

Если я не ошибаюсь, объединение соединений управляется MongoClient внутренне. В любом случае вы можете перейти к конструкции MongoClient MongoClientOptions (например, вы можете настроить количество соединений на один хост). – perbellinio

+0

В любом случае, что важно для пула соединений, так это то, что у вас есть только один экземпляр вашего MongoClient для вашего приложения. – perbellinio

0

Создание независимых экземпляров MongoTemplate каждый с его собственными учетными данными и выбрать соответствующий во время выполнения.

Каждое соединение устанавливается с использованием учетных данных, поэтому, если вы меняете их на существующее соединение, вы по существу разрушаете соединение и создаете новый, и не будете использовать преимущества объединения.

+0

Да!Для двух баз данных это будет работать, но для «n» количества баз данных, есть ли подходящий способ для многопользовательской аренды наряду с пулом соединений? –

+0

Вам нужно будет сохранить какую-то карту экземпляров MongoTemplate и выбрать подходящую во время выполнения. Если n велико, и ожидается, что только некоторые из экземпляров будут активны в любой момент времени, я обязательно установлю минимальное соединение на 0, чтобы избежать установления неиспользуемых подключений к серверу и потенциального исчерпания его ресурсов. – cjungel

 Смежные вопросы

  • Нет связанных вопросов^_^