使用Spring JPA的多租户

时间:2012-03-15 10:32:07

标签: java spring jpa multi-tenant

我正在寻找针对我的Web应用程序的多租户解决方案。 我想用Separate Schema Model实现一个应用程序。我想每个会话都有一个数据源。为了做到这一点,我把datasource和entitymanger放在会话范围内,但那不起作用。我想在用户输入用户名和密码以及tenantId时加载data-access-context.xml(包括数据源和其他存储库bean)文件。我想知道这是否是一个很好的解决方案?

2 个答案:

答案 0 :(得分:2)

多租户是一个有点棘手的主题,它必须在JPA提供商端处理,以便从客户端代码的角度来看,没有或几乎没有任何变化。 支持多租户(请参阅:EclipseLink/Development/Indigo/Multi-Tenancy),最近刚添加。

另一种方法是使用AbstractRoutingDataSource,请参阅:Multi tenancy in Hibernate

使用会话范围风险太大(同样,最终会有数千个数据库连接,每个会话/用户都很少。最后EntityManager和底层数据库连接不可序列化,因此您无法迁移会话和正确扩展你的应用程序。

答案 1 :(得分:0)

我曾与多个多租户系统合作过。这里面临的挑战是如何保持

  1. 开放式架构和
  2. 提供随业务发展的解决方案。
  3. 让我们先看看第二个挑战。多租户系统倾向于在需要支持用例的情况下发展,其中多个具有不同容量的租户(例如https://bugs.eclipse.org/bugs/show_bug.cgi?id=355458)可以访问相同的数据(记录)。因此,系统最终需要访问控制列表。

    要保持开放式架构,您可以编写标准代码(如JPA)。编写EclipseLink或Hibernate让我感到不舒服。

    Spring Security ACL为这两项挑战提供了非常灵活的社区支持解决方案。试一试。我做了并且对它的表现感到满意。但是,我必须提醒你,我需要花一些时间来解决它。