MongoDB 多租户 (Java):如何使用 MongoClient 在 运行 时切换具有不同数据库凭据的 MongoDB 数据库?

MongoDB multitenancy (Java): How to switch MongoDB databases, with different DB credentials, at run-time, using MongoClient?


我遇到了有关 MongoDB 多租户的问题。我有两个不同的 mongoDB 数据库(db1 和 db2)。它们都有不同的凭据。

db1 凭据:
用户名:admin
密码:passwd

db2 凭证
用户名:admin1
密码:passwd1

我需要在 运行 时从一个数据库切换到另一个数据库。我已使用 db1 凭据自动装配 mongoTemplate,但现在我无法使用 db2 凭据更新模板。这可能吗?如果是,如何?如果没有,请告诉我在 运行 时使用不同凭据切换数据库的任何其他方法。

请注意,我知道 "SimpleMongoDbFactory"。可以扩展 "SimpleMongoDbFactory" 并覆盖 "getDb" 方法并在 super.getDb("dbName") 中传递所需的 dbName 以实现多租户。但是,这不适用于具有不同凭据的两个数据库。

如果您为每个数据库创建一个 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 实例,每个实例都有自己的凭据,select 在运行时适当。

每个连接都是使用凭据建立的,因此如果您在现有连接上更改它们,您实际上是在破坏连接并创建一个新连接,并且不会利用池。