【问题标题】:MongoDB multitenancy (Java): How to switch MongoDB databases, with different DB credentials, at run-time, using MongoClient?MongoDB 多租户 (Java):如何在运行时使用 MongoClient 切换具有不同数据库凭据的 MongoDB 数据库?
【发布时间】:2017-01-04 00:59:28
【问题描述】:


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

db1 凭据
用户名:管理员
密码:passwd

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

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

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

【问题讨论】:

  • 为什么不创建两个单独的 mongo 模板,每个模板都引用它自己的 simplemongodbfactory ?
  • 这适用于 2 个或固定数量的数据库。但是如果数据库的数量不固定呢?
  • 嗨Sumit,如果你解决了我也有同样的要求,请指导我。
  • 您好 Lakshaman,使用 Java MongoClient 无法做到这一点。在初始化 mongoTemplate 之前,您必须知道数据库的数量,正如您在 stackoverflow.com/a/41446383/2163876 中看到的那样。其中一种解决方案是“签出 Java MongoClient 并根据我们的要求更新代码”。

标签: java mongodb multi-tenant mongotemplate


【解决方案1】:

如果您为每个数据库创建一个 MongoCredential 并将它们传递给您传递给您的 SimpleMongoDbFactoryMongoClient 会怎样

    MongoCredential credential1 = MongoCredential.createCredential("admin", db1, "password");
MongoCredential credential2 = MongoCredential.createCredential("admin1", db2, "password1");
    MongoClient mongoClient = new MongoClient(new ServerAddress(), Arrays.asList(credential1, credential2));

【讨论】:

  • 这种方法如何与 MongoDB 连接池一起使用?一次将存在多少个连接?
  • 如果我没记错的话,连接池是由 MongoClient 内部管理的。无论如何,您都可以将 MongoClientOptions 传递给 MongoClient 构造(例如,您可以配置每个主机的连接数)。
  • 无论如何,对于连接池来说真正重要的是您的应用程序只有一个 MongoClient 实例
  • 好的,谢谢!这真的很有帮助。
  • 请注意,现在不推荐使用每个客户端的多个凭据,并将在未来的版本中删除:jira.mongodb.org/browse/JAVA-2656
【解决方案2】:

创建独立的 MongoTemplate 实例,每个实例都有自己的凭据,并在运行时选择适当的。

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

【讨论】:

  • 是的!对于两个数据库,它可以工作,但对于“n”个数据库,是否有适当的多租户和连接池方法?
  • 您需要保留某种 MongoTemplate 实例的映射并在运行时选择适当的实例。如果 n 很大,并且在任何给定时间预计只有少数实例处于活动状态,那么我会确保将最小连接设置为 0,以避免与服务器建立未使用的连接并可能耗尽其资源。
猜你喜欢
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 2014-07-15
  • 2013-08-05
  • 2021-08-01
  • 1970-01-01
相关资源
最近更新 更多