我正在寻找适用于我的web应用程序的多租户解决方案。我想实现一个具有独立架构模型的应用程序。我正在考虑每个会话都有一个数据源。为了做到这一点,我将数据源和实体管理器放在了会话作用域中,但这并不起作用。我正在考虑在用户输入用户名、密码和tenantId时加载data-access-context.xml(包括数据源和其他存储库bean)文件。我想知道这是不是一个好的解决方案?
发布于 2012-03-15 18:38:16
多租户是一个有点棘手的问题,它必须在JPA提供程序端处理,所以从客户端代码的角度看,几乎没有什么变化。eclipselink支持多租户(参见:EclipseLink/Development/Indigo/Multi-Tenancy),hibernate最近才添加了它。
另一种方法是使用AbstractRoutingDataSource
,请参阅:Multi tenancy in Hibernate。
使用会话作用域的风险太大了(而且最终会有数千个数据库连接,每个会话/用户只有很少的连接。最后,EntityManager
和底层数据库连接是不可序列化的,因此您无法正确迁移会话和扩展应用程序。
发布于 2012-09-11 03:29:20
我使用过许多多租户系统。这里的挑战是你如何保持
让我们先来看看第二个挑战。多租户系统的发展趋势是,您需要支持不同容量(例如https://bugs.eclipse.org/bugs/show_bug.cgi?id=355458)的多个租户可以访问相同数据(记录)的用例。因此,系统最终需要访问控制列表。
为了保持开放架构,您可以按照标准(如JPA)编写代码。使用EclipseLink或Hibernate编码让我很不舒服。
Spring Security ACL为这两个挑战提供了非常灵活的社区支持的解决方案。试一试。我这样做了,并对它的性能感到满意。然而,我必须提醒你,我花了一些时间才弄明白这一点。
https://stackoverflow.com/questions/9717928
复制相似问题