我似乎偶然发现了tomcat 7和连接池的奇怪行为......
在我的应用程序中,我有以下3个数据源 - 连接到相同的数据库,但是不同的服务(并且在所有3个中都是相同的)
jdbc:sybase:Tds:<db_ip_address>:<db_port>/service1
jdbc:sybase:Tds:<db_ip_address>:<db_port>/service2
jdbc:sybase:Tds:<db_ip_address>:<db_port>/service3
在我的context.xml中,我像往常一样将3个数据源列为单独的资源,并设置了所有必要的选项,包括
<Resource
name="jdbc/dbDataSource1"
type="javax.sql.DataSource"
driverClassName="com.sybase.jdbc3.jdbc.SybDriver"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
maxActive="20"
initialSize="1"
minIdle="5"
maxIdle="10"
<Resource
name="jdbc/dbDataSource2"
<!-- Rest is same as above -->
<Resource
name="jdbc/dbDataSource3"
<!-- Rest is same as above -->
我注意到的是,因为3个数据源连接到同一个数据库,tomcat似乎只是创建并使用一个连接池并在所有3之间共享。这可以在启动时看到,如果我将initialSize更改为比方说10,前2个数据源创建没问题 - 在3号,我得到一个例外说
java.sql.SQLException: JZ00L: Login failed.
Examine the SQLWarnings chained to this exception for the reason(s).
我是否遗漏了一些关于如何设置连接池的明显内容?我查看了tomcat文档以及与全局连接池相关的内容,但是从我可以收集的内容看,这似乎与共享多个应用程序之间的连接有关吗?
非常感谢任何帮助!