Tomcat:1次战争,部署2次,2次配置

cod*_*ith 5 java tomcat configuration-files

简化情况:

  • 我有1个Tomcat容器和1个使用数据库的WAR.
  • 数据库配置位于属性文件中(战争中).
  • 我将WAR部署了2次,在contextpath上部署了一个webapp,在contextpath上部署了/a一个webapp /b.
  • 这两个webapps 现在指向同一个数据库(相同的cfg).

我想要的是每个webapp指向不同的数据库.因此,/a指向数据库A的webapp和/b指向数据库B的指向webapp .

你怎么解决这个问题?(没有分裂战争本身)

Meh*_*kur 9

您可以通过Tomcat的context.xml配置来完成,而无需拆分代码.

您可以为示例/a/b两个不同的全局数据源"sharedDataSourceA""sharedDataSourceB"定义两个上下文.您可以将不同的全局数据源绑定到具有相同名称的这些上下文,例如"appDataSource".

<GlobalNamingResources>
  ...
  <Resource name="sharedDataSourceA"
            global="sharedDataSourceA"
            type="javax.sql.DataSource"
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            alternateUsernameAllowed="true"
            username="bar"
            password="barpass"
            ...
<Resource name="sharedDataSourceB"
            global="sharedDataSourceB"
            type="javax.sql.DataSource"
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            alternateUsernameAllowed="true"
            username="bar"
            password="barpass"
            ...
  ...
</GlobalNamingResources>

<Context path="/a"...>
  ...
  <ResourceLink
            name="appDataSource"
            global="sharedDataSourceA"
            type="javax.sql.DataSource"
            factory="org.apache.naming.factory.DataSourceLinkFactory"
            username="foo"
            password="foopass"
  ...
</Context>
<Context path="/b"...>
  ...
  <ResourceLink
            name="appDataSource"
            global="sharedDataSourceA"
            type="javax.sql.DataSource"
  ...
</Context>
Run Code Online (Sandbox Code Playgroud)

然后在您的代码中,您可以通过jndi lookup 将数据源绑定到"appDataSource".将相同的战争部署到/a/b.他们将在不同的数据库上工作.