【问题标题】:Multitenancy in Hibernate using both Schema and DatabaseHibernate 中的多租户同时使用模式和数据库
【发布时间】:2023-04-01 15:06:02
【问题描述】:

应用程序有 2 个独立的数据库,例如:

  • DB1
  • DB2

不同公司的数据库分布在这两个数据库中,例如:

  • DB1
    • 公司 1
    • 公司2
    • 公司 3
    • 公司 4
  • DB2
    • 公司5
    • 公司6
    • 公司7
    • 公司 8

如何在hibernate中配置这样的场景? 所有示例均指基于模式的多租户或数据库多租户。

有没有办法配置这样的场景?

【问题讨论】:

  • 只使用数据库多租户不是更容易吗?基于模式的多租户适用于较小的数据集,但将两者结合起来并不值得。相反,您将拥有 Server1Server2(假设您有多个数据库服务器),每个都有 4 个公司数据库。
  • @Kayaman 数据库结构已经定义,这是一个现有的应用程序。我无法改变这一点。
  • 配置两个DataSources,一个用于DB1,另一个用于DB2。创建AbstractRoutingDataSource 的两个实现 - 一个允许为当前客户端选择 DB1 的数据源;另一个允许为 DB2 选择数据源。最后,创建AbstractRoutingDataSource 的第三个实现,允许为当前客户端选择其他两个AbstractRoutingDataSource 实现之一。链接的博客包含所需的所有信息。

标签: java database hibernate spring-boot multi-tenant


【解决方案1】:

我将使用单独的数据库获取策略,并在 ConnectionProvider 覆盖方法 getConnection() 中设置架构。 在这种情况下,我可以更改数据库并为租户选择特定的架构。

【讨论】:

    【解决方案2】:

    您将不得不创建自己的MultiTenantConnectionProvider 实现来处理数据库和架构级别的多租户。那应该是阻力最小的路径。

    这里有一些关于使用 spring、hibernate 和自定义多租户的稍微过时的信息:Setting up a MultiTenantConnectionProvider using Hibernate 4.2 and Spring 3.1.1

    【讨论】:

      【解决方案3】:

      为此,您应该在配置文件中创建两个 sessionFactory Bean。在您的 DAO 层中,您使用限定符注释来调用它。

      【讨论】:

        猜你喜欢
        • 2013-05-23
        • 2021-03-26
        • 2018-02-20
        • 2012-01-11
        • 2022-10-04
        • 1970-01-01
        • 1970-01-01
        • 2017-04-29
        • 2019-06-23
        相关资源
        最近更新 更多