【问题标题】:how to implement multi-tenant using spring-data-mongodb如何使用 spring-data-mongodb 实现多租户
【发布时间】:2021-09-07 12:56:54
【问题描述】:

我是使用 spring-data-mongodb 的 mongodb 多租户的新手,我们需要在相同的代码中使用 spring-data-mongodb 来处理其他 API 和调度任务(我们的应用程序中有多个调度程序)线程安全。是否自动装配 mongoTemplate 将使应用程序线程安全,因为将从调度程序和 API 访问相同的 mongoTemplate。在这种情况下,请给我一个好的做法。

问候

克里斯

【问题讨论】:

    标签: mongodb spring-boot spring-data-mongodb


    【解决方案1】:

    MongoTemplate 本身是线程安全的,即你可以同时从多个线程调用它,它会正常工作,即将不同的请求正确地发送到 MongoDB。

    但这并不能保证一致性:如果调度程序正在运行并在同一个任务中执行多个更新,则 API 调用可能会获取一些更新的记录和一些尚未更新的其他记录。

    顺便说一句:多租户是在同一个数据库中拥有来自多个组织实体的数据。我不确定这与您的问题有何关联,您的意思是多线程吗?

    【讨论】:

    • 感谢您的回答,我们在同一台服务器中有一个tenantdb / 客户,并且是多租户的,我可以有这样的情况:调度程序设置租户名称是否会影响租户名称来自 API,或调度程序线程和 API 线程与其租户代码无关,请澄清。克里斯
    • 如果你有多个租户,你如何存储它们?不同的数据库?还有一个应用程序?
    • 我们存储为不同的数据库和单个应用程序,请澄清
    • 见上面的新答案。
    【解决方案2】:

    如果您使用不同的数据库,则不能使用自动装配的 MongoTemplate。 对于自动装配,必须有一个实例,但是由于数据库连接字符串是 MongoTemplate 的依赖项,因此也必须有一个数据库。

    您可以采用一种不直接自动连接 MongoTemplate 的方法,而是使用某种工厂模式为当前租户创建正确的 MongoTemplate。有关一些示例,请参阅Making spring-data-mongodb multi-tenant。 (这是一个老问题,但它的答案会不时更新)。

    或者您可以使用基础设施解决方案,并部署应用程序的单独实例,每个租户一个实例,例如在 Kubernetes 上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-19
      • 2011-08-05
      • 2017-10-23
      • 2016-09-24
      • 2015-01-10
      • 2020-11-21
      • 2014-04-19
      相关资源
      最近更新 更多