tomcat 7 jdbc连接池和jdbc4验证

Posted

技术标签:

【中文标题】tomcat 7 jdbc连接池和jdbc4验证【英文标题】:tomcat 7 jdbc connection pool and jdbc4 validation 【发布时间】:2014-12-19 03:52:02 【问题描述】:

我想使用 JDBC4 Connection.isValid 而不是验证查询来验证使用 tomcat 7 jdbc 池的 jdbc 连接。

我想知道像下面这样实现Validator 是否就足够了。我也想知道哪个是一个不错的超时。

提前致谢! 费德

PS:我使用的是 oracle 11g。

public class MyValidator implements Validator
   public static final int DEFAULT_TIMEOUT = 5;

   public boolean validate(final Connection c, final int validateAction)
      try
         return c.isValid(DEFAULT_TIMEOUT);
      catch(Exception e)
        // LOG e
        return false;
      

【问题讨论】:

bz.apache.org/bugzilla/show_bug.cgi?id=48817。我无法从报告中判断这是否已实施,但您肯定不是第一个提出这个问题的人。 【参考方案1】:

调试器可以帮助您解决这种情况:Tomcat / DBCP 连接池不返回原始连接,而是返回一个包装器/适配器,用于回收底层的“真实”连接。池通常会自行检查连接(如果需要重新连接),我猜它不允许真正验证。

您在Tomcat doc 中有更多关于池验证参数的信息。 Another exchange 处理包装 Oracle 连接的 JBoss 池,这是一种常见的做法。

【讨论】:

以上是关于tomcat 7 jdbc连接池和jdbc4验证的主要内容,如果未能解决你的问题,请参考以下文章

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException MySQL + Apache Tomcat 7

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

org.apache.tomcat.jdbc.pool 中的验证查询

Tomcat 7 和 Oracle 连接池

再淡spring jdbc 连接池断开重连设置

ColdFusion 数据源未正确连接