我似乎偶然发现了 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 文档和与全局连接池相关的内容,但是从我收集到的信息来看,这似乎与共享多个应用程序之间的连接有关?
非常感谢任何帮助!
最佳答案
确实似乎有太多空闲连接。尝试增加空闲连接属性或检查是否关闭所有打开的连接。 请引用this link
关于java - Tomcat 7 连接池问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22300346/