gpt4 book ai didi

java - Tomcat:1 场 war ,2 次部署,2 次配置

转载 作者:搜寻专家 更新时间:2023-10-31 08:25:14 26 4
gpt4 key购买 nike

简化情况:

  • 我有 1 个 Tomcat 容器和 1 个使用数据库的 WAR。
  • 数据库配置位于属性文件中( war 中)。
  • 我部署了 2 次 WAR,一个 webapp 在 contextpath /a 上,一个 webapp 在 contextpath /b 上。
  • 两个网络应用程序现在都指向相同的数据库(相同的 cfg)。

我想要的是每个 webapp 指向一个不同的数据库。所以,/a 上的 webapp 指向数据库 A/b 上的 webapp 指向数据库 B .

你会如何解决这个问题? (不 split war 本身)

最佳答案

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

您可以定义两个上下文,例如 /a/b 以及两个不同的全局数据源 "sharedDataSourceA""sharedDataSourceB”。您可以将不同的全局数据源绑定(bind)到具有相同名称(如 “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>

然后在您的代码中,您可以通过 jndi 查找将数据源绑定(bind)到 “appDataSource”。将相同的 war 部署到 /a/b 。他们将在不同的数据库上工作。

关于java - Tomcat:1 场 war ,2 次部署,2 次配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47712120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com