在Spring JPA应用程序中使用多个数据库

时间:2011-08-19 04:49:34

标签: database spring authentication jpa persistence

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

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

我如何使用Spring / JPA实现这一目标?我是否需要在适当的实体管理器工厂中根据当前登录的用户拥有多个持久性上下文和连线?是否有任何实现与此类似的实例?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果您确实希望为特定客户提供单独的数据库,那么这将是一种方法 - 使用相同的实体定义,但使用不同的实体管理器工厂配置来定义单独的持久性单元。 / p>

对我而言,这听起来更像是需要重新设计数据库结构。我猜这个应用程序只是针对一个客户编写的,结果发现更多的应用程序出现在地平线上,所以,嘿,让我们做点什么吧,快点!你是不是想复制粘贴,但规模更大?如果你想拥有一些具有相同结构的数据库,你将会有很多与JPA的冗余:例如,每个持久性定义了映射文件中定义的所有内容(查询,实体关系映射等) unit - 你必须重复这些定义并保持它们全部同步。

我会因为缺乏更广泛的描述而停在这里,因为这只是猜测。