我使用的是Hikari jdbc连接池。
当execute语句产生异常时(例如网络被破坏)。如下:
try{
Connection con = pool.getConnection();
con.executeQuery("....");
}catch(Exception e){
con.close();
}
con.close
是否会驱逐断开的连接,而不是将其释放到池中。
如果断开的连接被释放到池中。它可能是按照getConnection
的要求得到的。
答案 0 :(得分:1)
如果您的驱动程序与JDBC4兼容(并且支持row
),则默认情况下通过此API完成连接验证。
否则,您可以设置要为验证执行的connectionTestQuery。
答案 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()中关闭连接