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

时间:2015-01-31 14:32:32

标签: spring apache spring-mvc tomcat multi-tenant

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

我们目前的设置包括:

  • Apache 2 Web服务器
  • Tomcat 8
  • Spring 4.1

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

  • / customer1 - >的Tomcat / customer1表
  • / customer2 - >的Tomcat / customer2表

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

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

将来应用程序应以某种方式运行/webapps/*,因此在春季我可以查看请求网址,并为db_customer1的请求选择/customer1/...customer2的请求{1}}。

这可能实现吗?

1 个答案:

答案 0 :(得分:2)

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

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

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