首页 > 解决方案 > 在 Tomcat 或 Wildfly 中使用 Java Web 应用程序进行多租户

问题描述

我有一个使用在 Tomcat 8.5 上运行的 JSF 的 Java Web 应用程序。每个租户都有多个用户,并有自己的 URL,例如:

example.com/tenant1 example.com/tenant2 ... example.com/tenant100

这目前是通过为每个租户部署一次相同的 WAR 文件来实现的,所以我们有

租户1.war,租户2.war,...租户100.war

每个租户在同一个数据库上都有自己的架构,并且应用程序通过 Tomcat 8.5 中的 JNDI 使用自己的数据库登录名。它还使用容器管理的安全性来处理用户登录。

到目前为止,这工作正常,但随着更多租户(领域)的添加,启动时间开始滞后 - 每个要部署的 WAR 文件大约需要 3 秒。有没有更有效的方法来解决这个问题,以便我们只使用一个 WAR 文件,但仍然有单独的数据库(或模式)和安全性来隔离租户?

我看到 Spring 在这里有一种方法和Hibernate multitenancy,但我没有使用 JPA/Hibernate 或 Spring。

目前在 Tomcat 上运行,但如果存在,我可以切换到 Wildfly 并使用其他一些 JEE 解决方案。

任何更通用的架构方法也值得赞赏。

标签: javatomcatjakarta-eewildflymulti-tenant

解决方案


处理多租户的最佳方法是拥有一个代码库,这是多租户的最高级别。

在您的场景中,您可以设置过滤器来拦截传入的请求,然后使用租户信息将分段 1 标识为租户名称。

一旦获得,将有一个TenantContext租户信息,如数据库架构等。这可用于为数据库查询设置正确的数据上下文。

高温高压


推荐阅读