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&jdbcCompliantTruncation=false"/>
< /Context>
的问题是,如果我是来规范它,这样,而不是唯一的名称连接池呼吁所有部署的情况下,JDBC /数据库,有数据库的机会跨越,即在另一个客户的数据库中的一个客户,还是这些本地化到特定的部署实例?
想法? 谢谢, Scott
回答:
否。数据源名称的范围是一个Tomcat实例。
如果您要为每个客户启动一个单独的Tomcat进程,那么重要的是如何配置数据源,而不是Tomcat称之为的方式。只要每个数据源配置为使用不同的数据库,就不会有任何串扰。
回答:
如果您在上下文中为应用程序的部署定义JNDI DataSource
资源,我相信您甚至可以在同一个Tomcat实例中运行同一应用程序的多个副本,并使用相同的JNDI名称来访问不同的应用程序数据库。如果每个应用程序实例完全在不同的Tomcat实例中运行,那么肯定没有办法指出一个实例会引用为另一个实例指定的数据库。
回答:
这取决于你如何为每个客户端部署应用程序,
- 如果每个客户端获得自己的Tomcat安装(他们有不同的CATALINA_HOME),没有机会为它跨越。
- 如果它们都使用相同的安装,但运行Tomcat作为不同的主机,你需要确保你没有定义在conf/context.xml文件,它是由所有主机共享数据源。
- 如果所有客户端共享相同的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