Spring + Tomcat 基于请求的多租户 URL
Spring + Tomcat multi tenancy based on Request URL
我们有一个由多个客户使用的应用程序。每次都是相同的应用程序,但具有不同的数据库。
我们当前的设置包括:
- Apache 2 网络服务器
- Tomcat 8
- Spring 4.1
Web 服务器将特定 URL 路由到 Tomcat,即
- /客户 1 -> tomcat/customer1
- /客户 2 -> tomcat/customer2
现在我们希望将这些条目保留在 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/
我们有一个由多个客户使用的应用程序。每次都是相同的应用程序,但具有不同的数据库。
我们当前的设置包括:
- Apache 2 网络服务器
- Tomcat 8
- Spring 4.1
Web 服务器将特定 URL 路由到 Tomcat,即
- /客户 1 -> tomcat/customer1
- /客户 2 -> tomcat/customer2
现在我们希望将这些条目保留在 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/