Tomcat 每次借用时验证连接
Tomcat validates connection on every borrow
我在 Eclipse 4.3.2 中使用 Tomcat 7 (jdk 1.6)。
我将我的连接池配置如下:
<Resource name="jdbc/myDS" auth="Container" type="javax.sql.DataSource"
driverClassName="com.p6spy.engine.spy.P6SpyDriver"
url="jdbc:p6spy:oracle:thin:@server:1521:XXX"
username="XXX" password="XXX" maxActive="2" maxIdle="2" maxWait="-1"
validationInterval="30000" validationQuery="SELECT 1 FROM DUAL"
/>
我正在使用 Spring 3.2.14、Hibernate 3.2.6-GA、CXF 2.7。
每次我收到 SOAP 请求时,我都会在 P6SPY 日志中看到 验证查询 运行 独立于 validationInterval 及其描述 https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html。
我原以为连接最多每 30 秒验证一次。
我的配置有什么问题吗,或者这是一个已知错误?
嗯,这可能是因为您将 testOnBorrow
参数设置为 true。这取自您提供的文档link。
The indication of whether objects will be validated before being borrowed from the pool
因此,我认为您可能希望将其设置为 false
解释很简单,我没有正确阅读文档,我需要将工厂设置为org.apache.tomcat.jdbc.pool.DataSourceFactory
才能使用"Tomcat High-concurrency connection pool".
之后所有参数都按预期工作:
<Resource
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
name="jdbc/myDS" auth="Container" type="javax.sql.DataSource"
driverClassName="com.p6spy.engine.spy.P6SpyDriver"
url="jdbc:p6spy:oracle:thin:@server:1521:XXX"
username="XXX" password="XXX" maxActive="2" maxIdle="2" maxWait="-1"
testOnBorrow="true"
testWhileIdle="true"
timeBetweenEvictionRunsMillis="10000"
validationInterval="30000"
validationQuery="SELECT 1 FROM DUAL"
/>
连接最多每 validationInterval
验证一次。 evictionThread 每 timeBetweenEvictionRunsMillis
运行一次并验证空闲连接(我选择这样做是为了节省连接借用时间)。
我在 Eclipse 4.3.2 中使用 Tomcat 7 (jdk 1.6)。
我将我的连接池配置如下:
<Resource name="jdbc/myDS" auth="Container" type="javax.sql.DataSource"
driverClassName="com.p6spy.engine.spy.P6SpyDriver"
url="jdbc:p6spy:oracle:thin:@server:1521:XXX"
username="XXX" password="XXX" maxActive="2" maxIdle="2" maxWait="-1"
validationInterval="30000" validationQuery="SELECT 1 FROM DUAL"
/>
我正在使用 Spring 3.2.14、Hibernate 3.2.6-GA、CXF 2.7。
每次我收到 SOAP 请求时,我都会在 P6SPY 日志中看到 验证查询 运行 独立于 validationInterval 及其描述 https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html。
我原以为连接最多每 30 秒验证一次。
我的配置有什么问题吗,或者这是一个已知错误?
嗯,这可能是因为您将 testOnBorrow
参数设置为 true。这取自您提供的文档link。
The indication of whether objects will be validated before being borrowed from the pool
因此,我认为您可能希望将其设置为 false
解释很简单,我没有正确阅读文档,我需要将工厂设置为org.apache.tomcat.jdbc.pool.DataSourceFactory
才能使用"Tomcat High-concurrency connection pool".
之后所有参数都按预期工作:
<Resource
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
name="jdbc/myDS" auth="Container" type="javax.sql.DataSource"
driverClassName="com.p6spy.engine.spy.P6SpyDriver"
url="jdbc:p6spy:oracle:thin:@server:1521:XXX"
username="XXX" password="XXX" maxActive="2" maxIdle="2" maxWait="-1"
testOnBorrow="true"
testWhileIdle="true"
timeBetweenEvictionRunsMillis="10000"
validationInterval="30000"
validationQuery="SELECT 1 FROM DUAL"
/>
连接最多每 validationInterval
验证一次。 evictionThread 每 timeBetweenEvictionRunsMillis
运行一次并验证空闲连接(我选择这样做是为了节省连接借用时间)。