我有一个支持单个客户的 Spring 应用程序。
我想扩展此应用程序以支持多个客户,其中每个客户数据库都存储在一个单独的数据库中。数据库的架构对于每个客户都是相同的,相同的 DAO 和业务逻辑应该保持不变。
我将如何使用 Spring/JPA 完成此任务?我是否需要有多个持久性上下文并根据当前登录的用户连接到适当的实体管理器工厂?是否有任何实现与此类似的示例?
最佳答案
我建议不要在单个应用程序下运行单独的数据库。如果重新设计数据模型以合并多个客户不是一种选择,为什么不运行应用程序服务器/Web 容器的多个实例,每个客户一个?否则,您将不得不应对共享平台和独立数据库的缺点。
如果有多个客户数据库和一个应用程序,您的代码将变得更加复杂,您无法保证客户数据是完全隔离的(例如,由于应用程序中的错误,向客户显示了错误的数据,因此没有太多受益于隔离每个客户),您将面临维护每个客户数据库的噩梦。此外,通过拥有不同的数据库,您几乎可以保证某个尖头头发的人会为客户 A 要求一些定制功能,同时让客户 B 的功能保持不变,因为“......这很容易,因为我们有不同的数据库...”,忘记应用程序是共享的。
关于database - 在 Spring JPA 应用程序中使用多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7117071/