dataSourcePool在释放到池时关闭断开的连接

时间:2015-12-23 09:52:05

标签: jdbc connection-pooling hikaricp

我使用的是Hikari jdbc连接池。

当execute语句产生异常时(例如网络被破坏)。如下:

try{
   Connection con = pool.getConnection();
   con.executeQuery("....");
}catch(Exception e){
   con.close();
}

con.close是否会驱逐断开的连接,而不是将其释放到池中。

如果断开的连接被释放到池中。它可能是按照getConnection的要求得到的。

4 个答案:

答案 0 :(得分:1)

如果您的驱动程序与JDBC4兼容(并且支持row),则默认情况下通过此API完成连接验证。

否则,您可以设置要为验证执行的connectionTestQuery

另请参阅this讨论和source代码。

答案 1 :(得分:0)

在finally块中使用con.close,否则在catch块中必须首先询问是否con!= null以避免catch块中产生的异常。其他alernative可以在其他try {} catch {}块中包含con.close()。希望这有帮助。

答案 2 :(得分:0)

您应该考虑使用try-with-resource:

try(Connection con = pool.getConnection()) {
  DO SOMETHING WITH CONNECTION
}catch(Exception e){
   e.printStackTrace();
}

这将保证将连接返回给池。检查连接是否有效是的任务,而不是您的代码的任务。您可以配置池以检查与connectionTestQuery属性的连接 - 所以就是这样。

答案 3 :(得分:0)

如果您正在使用try-with-resource并且如果网络中断,HikariCP很可能会关闭连接,而不是回收。 来自HikariCP源代码,如果connection.close()中存在此类异常,则在checkException()中关闭连接