Tomcat - 数据库连接池问题
Posted
技术标签:
【中文标题】Tomcat - 数据库连接池问题【英文标题】:Tomcat - Database connection pool issue 【发布时间】:2015-03-22 11:22:43 【问题描述】:前提条件:hostB不可连接
使用 context.xml(A) 时,在 Tomcat 启动时检查每个数据连接(在初始化 hostB 的数据连接池时抛出错误),而使用 context.xml(B),似乎没有检查任何内容没有数据库连接错误。
有人知道为什么会这样吗?
谢谢
↓context.xml(A)
<Resource name="jdbc/AAA"
initialSize="8"
minIdle="8"
maxWait="300000"
removeAbandoned="true"
removeAbandonedTimeout="60"
auth="Container"
type="javax.sql.DataSource"
username="uname"
password="password"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://hostA:port;databaseName=sqlserverDB" />
<Resource name="jdbc/BBB"
initialSize="8"
minIdle="8"
maxWait="300000"
removeAbandoned="true"
removeAbandonedTimeout="60"
auth="Container"
type="javax.sql.DataSource"
username="uname"
password="password"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://hostB:port;databaseName=sqlserverDB" />
↓context.xml(B)
<Resource name="jdbc/AAA"
auth="Container"
type="javax.sql.DataSource"
username="uname"
password="password"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://hostA:port;databaseName=sqlserverDB" />
<Resource name="jdbc/BBB"
auth="Container"
type="javax.sql.DataSource"
username="uname"
password="password"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://hostB:port;databaseName=sqlserverDB" />
【问题讨论】:
【参考方案1】:第一个设置了initilsize和minIdle,所以tomcat会在初始化时尝试打开8个连接。第二个闲置直到真正需要它。
【讨论】:
根据link,默认情况下,启动池时DBCP会创建10个连接。显式定义“initialSize”属性和隐式使用默认值有什么区别吗? 对不起,我也忘了提到 minIdle,这是你的主要原因。 initialSize 过去默认为 0。 根据我的观察,无论是否设置了minIdle,只要将initialSize设置为0,tomcat都不会尝试打开db连接。 DBCP:默认 initialSize = 0 Tomcat JDBC:默认 initialSize = 10以上是关于Tomcat - 数据库连接池问题的主要内容,如果未能解决你的问题,请参考以下文章