Spring + Tomcat 基于请求的多租户 URL

Spring + Tomcat multi tenancy based on Request URL

我们有一个由多个客户使用的应用程序。每次都是相同的应用程序,但具有不同的数据库。

我们当前的设置包括:

Web 服务器将特定 URL 路由到 Tomcat,即

现在我们希望将这些条目保留在 Apache Config 中,但要以某种方式配置 Tomcat 和 Spring。基本上 Tomcat 应该接受每个请求(可能由正则表达式定义 - 不是必需的)并将其路由到一个应用程序。

目前一个应用程序 运行s 在 /webapps/customer1 和另一个实例在 /webapps/customer2

将来应用程序应该以某种方式 运行 在 /webapps/*,所以在 spring 我可以查看请求 URL 并选择 db_customer1 对于 /customer1/... 的请求,对于 customer2.

的请求也是如此

这可以实现吗?

如果我没理解错的话,您需要使用 2 个(或更多)数据库的单个应用程序,具体取决于客户。客户通过 URL.

确定

如果是这种情况,您应该查看 AbstractRoutingDatasource 并创建您自己的 class 实现。它允许您在单个应用程序中使用不同的数据源。然后,您应该创建一个过滤器或拦截器来拦截 URL,然后根据 URL,将路由数据源路由到适当的底层数据源。

看看下面链接的这个例子:它有一个客户路由数据源,它为不同的登录用户使用不同的数据库: https://spring.io/blog/2007/01/23/dynamic-datasource-routing/