【问题标题】:Using multiple databases in a Spring JPA application在 Spring JPA 应用程序中使用多个数据库
【发布时间】:2011-08-19 04:49:33
【问题描述】:

我有一个支持单个客户的 Spring 应用程序。

我想扩展此应用程序以支持多个客户,其中每个客户数据库都存储在单独的数据库中。每个客户的数据库架构都相同,相同的 DAO 和业务逻辑应该保持不变。

我将如何使用 Spring/JPA 完成此任务?我是否需要根据当前登录的用户在适当的实体管理器工厂中拥有多个持久性上下文并进行连接?有没有实现类似的例子?

【问题讨论】:

    标签: database spring authentication jpa persistence


    【解决方案1】:

    我建议不要在单个应用程序下运行单独的数据库。如果重新设计数据模型以合并多个客户不是一种选择,为什么不运行应用程序服务器/Web 容器的多个实例,每个客户一个?否则,您将不得不处理拥有共享平台和隔离数据库的缺点。

    如果有多个客户数据库和一个应用程序,您的代码将变得更加复杂,您无法保证客户数据是完全隔离的(例如,由于应用程序中的错误,客户会看到错误的数据,所以没有太多受益于隔离每个客户),您将面临维护每个客户数据库的噩梦。此外,通过拥有不同的数据库,您几乎可以保证尖头发的人会为客户 A 要求一些定制的功能,而不会影响客户 B 的功能,因为“......这很容易,因为我们有不同的数据库...”,忘记了应用程序是共享的。

    【讨论】:

      【解决方案2】:

      如果您真的非常想为特定客户提供单独的数据库,这将是可行的方法 - 使用相同的实体定义定义单独的持久性单元,但实体管理器工厂配置不同。

      对我来说,这听起来更像是需要重新设计数据库结构。我猜这个应用程序是为一个客户编写的,结果发现更多的客户出现了,所以,嘿,让我们做点什么,快点!您不是要复制粘贴,而是要扩大规模吗?如果您想拥有几个具有相同结构的数据库,您将在 JPA 中获得大量冗余:例如,映射文件中定义的所有内容(查询、实体关系映射等)都是按持久性定义的单元——你必须重复这些定义并保持它们同步。

      我将在此停止,因为这只是猜测,因为缺乏更广泛的描述。

      【讨论】:

        猜你喜欢
        • 2018-03-15
        • 1970-01-01
        • 2012-04-11
        • 1970-01-01
        • 1970-01-01
        • 2013-09-21
        • 2016-10-21
        • 2015-12-04
        • 2023-03-09
        相关资源
        最近更新 更多