java - Tomcat 在每次借用时验证连接

标签 java tomcat jdbc connection-pooling

我在 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 秒验证一次。

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

最佳答案

解释很简单,我没有正确阅读文档,我需要将工厂设置为 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 验证一次。 evictionThread 每隔 timeBetweenEvictionRunsMillis 运行一次并验证空闲连接(我选择这样做是为了节省连接借用时间)。

关于java - Tomcat 在每次借用时验证连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30330621/

相关文章:

Spring/MyBatis JDBC 连接被拒绝

java - 如何实现 Eclipse 的清洁和构建(又名重建)?

Java:验证 null 方法参数的最佳方法是什么

java - 如何在基于 Struts 桥的 portlet 链接中设置 WindowState?

java - 返回第一个括号中出现的单词的正则表达式

java - 创建芝麻存储库

java.lang.ClassNotFoundException : com. mysql.jdbc.Driver [ eclipse ,Tomcat]

java - tomcat上的liferay不加载类

java - Tomcat 7.0 : Requested Resource (Servlet) not available

java - Jasper 报告 - 使用 BLOB 作为详细信息字段时出现 java.lang.ClassNotFoundException : oracle. jdbc.OracleBlob