Tomcat 在每次借用时验证连接

yun*_*dus 2 java tomcat connection-pooling jdbc

我在 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"
/>
Run Code Online (Sandbox Code Playgroud)

我使用的是 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 秒验证一次。

我的配置有什么问题吗,或者这是一个已知的错误?

yun*_*dus 5

解释很简单,我没有正确阅读文档,我需要将工厂设置org.apache.tomcat.jdbc.pool.DataSourceFactory为才能使用“Tomcat高并发连接池”

之后,所有参数都按预期工作:

<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"
/>
Run Code Online (Sandbox Code Playgroud)

连接最多在每个validationInterval. 一个evictionThread运行每隔timeBetweenEvictionRunsMillis并验证空闲连接(我选择为了做到这一点,以业余时间连接借)。