Tomcat JDBC连接池是否在实例之间共享?

我们现在有一个Web应用程序,我们为每个客户端部署一个副本。我们当前的部署策略是为每个实例创建一个唯一命名的jdbc连接池。 所以说jdbc /客户端。他们都是这样规定的...Tomcat JDBC连接池是否在实例之间共享?

< Context path="/" 

reloadable="true"

docBase="\home\client\ROOT"

debug="5" >

< Resource name="jdbc/client"

auth="Container"

type="javax.sql.DataSource"

maxActive="100"

maxIdle="30"

validationQuery="SELECT 1"

testWhileIdle="true"

timeBetweenEvictionRunsMillis="300000"

numTestsPerEvictionRun="6"

minEvictableIdleTimeMillis="1800000"

maxWait="10000"

username="user"

password="pass"

driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://databaseserver:3306/client ?zeroDateTimeBehavior=convertToNull&amp;jdbcCompliantTruncation=false"/>

< /Context>

的问题是,如果我是来规范它,这样,而不是唯一的名称连接池呼吁所有部署的情况下,JDBC /数据库,有数据库的机会跨越,即在另一个客户的数据库中的一个客户,还是这些本地化到特定的部署实例?

想法? 谢谢, Scott

回答:

否。数据源名称的范围是一个Tomcat实例。

如果您要为每个客户启动一个单独的Tomcat进程,那么重要的是如何配置数据源,而不是Tomcat称之为的方式。只要每个数据源配置为使用不同的数据库,就不会有任何串扰。

回答:

如果您在上下文中为应用程序的部署定义JNDI DataSource资源,我相信您甚至可以在同一个Tomcat实例中运行同一应用程序的多个副本,并使用相同的JNDI名称来访问不同的应用程序数据库。如果每个应用程序实例完全在不同的Tomcat实例中运行,那么肯定没有办法指出一个实例会引用为另一个实例指定的数据库。

回答:

这取决于你如何为每个客户端部署应用程序,

  1. 如果每个客户端获得自己的Tomcat安装(他们有不同的CATALINA_HOME),没有机会为它跨越。
  2. 如果它们都使用相同的安装,但运行Tomcat作为不同的主机,你需要确保你没有定义在conf/context.xml文件,它是由所有主机共享数据源。
  3. 如果所有客户端共享相同的Tomcat实例,并且它们只是不同的Web应用程序,则需要更多的关注。您需要在META-INF/context.xml或WEB-INF/web.xml中定义数据源。为了进一步隔离,您应该将dbcp.jar复制到每个应用程序的WEB-INF/lib中,以便使用它们自己的DBCP实例。

回答:

不存在数据库交叉的可能性因为数据源名称的范围是一个Tomcat实例,并且您可以在单个tomcat实例中拥有多个数据源....所以只要数据源不同没有数据库交叉的机会.....

以上是 Tomcat JDBC连接池是否在实例之间共享? 的全部内容, 来源链接: utcz.com/qa/262068.html

回到顶部