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 - 数据库连接池问题的主要内容,如果未能解决你的问题,请参考以下文章

java sql数据连接池的问题?

Tomcat/数据库设置 - JDBC 连接池

如何记录 Tomcat 7 JDBC 连接池、连接创建

Tomcat数据库连接池

配置Tomcat7.1数据库连接池

在 tomcat 服务器上使用连接池时的数据同步问题