【问题标题】:Multi-tenancy with a Java web app in Tomcat or Wildfly在 Tomcat 或 Wildfly 中使用 Java Web 应用程序进行多租户
【发布时间】:2021-05-22 05:00:10
【问题描述】:

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

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

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

tenant1.war,tenant2.war,...tenant100.war

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

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

我看到 Spring 有一个方法 hereHibernate multitenancy,但我没有使用 JPA/Hibernate 或 Spring。

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

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

【问题讨论】:

    标签: java tomcat jakarta-ee wildfly multi-tenant


    【解决方案1】:

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

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

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

    HTH

    【讨论】:

    • 感谢您的回答。您能否提供有关“拦截传入请求的过滤器”的更多信息以及在哪里可以找到TenantContext?请记住,我没有使用 Spring 或 JPA。
    • 如果你不使用spring,你的rest api是如何构建的,请你分享更多细节
    • 没有 REST API - 它是一个 Java webapp,页面是用 JSF 编写的。
    猜你喜欢
    • 1970-01-01
    • 2012-07-24
    • 2018-06-02
    • 2023-03-27
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2019-06-21
    相关资源
    最近更新 更多