1

我使用 hikaricp 作为我的数据库连接池。当我完成我的 SQL 语句时,我通过在连接上调用 close 来关闭连接,我相信你应该将连接代理返回到池中。然而,我看到以下警告(不是错误)消息,我不得不怀疑它是否是一个需要解决的问题,因为我没有正确清理我的连接资源。我没有使用资源尝试,而是使用了 try catch finally(我在 finally 中关闭了连接,我意识到在某些情况下, finally 实际上可能不会被调用,但在我的情况下它会被调用)。有什么想法吗?

2014-09-15 13:59:26,083 WARN c.z.h.p.LeakTask [Hikari Housekeeping Timer (pool wmHikariCp)] Connection leak detection triggered, stack trace follows java.lang.Exception
    at com.abc.test.DBConnPool.getConnection(DBConnPool.java:71)
    at com.abc.test.TestProj.callDB(TestApp.java:30)
    at com.abc.test.TestProj.main(TestApp.java:81)
4

2 回答 2

1

您能否确认您是否确实将连接释放回池?您可以使用资源尝试(除了 Brett 提到的增加阈值):

try (Connection conn = DBConnectionPool.getConnection(); 
        PreparedStatement ps = conn.prepareStatement(preparedQuery);) {

和结果集(因为某些驱动程序/数据库在清除连接时可能不会清除结果集,尽管不确定这是否对新的驱动程序/数据库仍然有效,但我不确定您使用的是什么):

    try (ResultSet rs = ps.executeQuery();) {

希望能帮助到你。

于 2014-09-16T16:07:54.513 回答
0

您可能只是使用连接的时间超过了泄漏检测超时时间。泄漏检测是连接离开池多长时间的阈值。尝试将阈值增加到更长的超时时间。

于 2014-09-16T06:35:16.253 回答