Java Tomcat在每次借用时验证连接

Java Tomcat在每次借用时验证连接,java,tomcat,jdbc,connection-pooling,Java,Tomcat,Jdbc,Connection Pooling,我正在Eclipse4.3.2中使用Tomcat7(JDK1.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" passwo

我正在Eclipse4.3.2中使用Tomcat7(JDK1.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"
/>

我使用的是Spring3.2.14、Hibernate3.2.6-GA、CXF2.7

每次收到SOAP请求时,我都会在P6SPY日志中看到,验证查询是独立于validationInterval及其描述运行的

我希望连接最多每30秒验证一次


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

嗯,这可能是因为您将
testOnBorrow
参数设置为true。这是从您提供的文档链接中获取的

在从池中借用对象之前是否验证对象的指示


因此,我认为您可能希望将其设置为
false

解释非常简单,我没有正确阅读文档,我需要将工厂设置为
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"
/>


最多每
validationInterval
对连接进行一次验证。ExcitionThread在NevictionRunsMillis之间每隔一段时间运行一次,并验证空闲连接(我选择这样做是为了在连接借用时腾出时间)。

好吧,我尝试了使用和不使用
testOnBorrow
参数的两种解决方案。但我还是希望validationInterval有优先权。我编辑我的问题是为了删除
testOnBorrow