当前位置: 首页 > 知识库问答 >
问题:

HikariCP连接泄漏

秦伯寅
2023-03-14

我正在开发一个在Java服务器上运行的游戏。对于数据库池,我使用的是HikariCP,这是一个优秀的库,但它现在抛出了以下错误:

[Hikari housekeeper (pool HikariPool-0)] WARN com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for connection com.mysql.jdbc.JDBC4Connection@5910e440, stack trace follows
java.lang.Exception: Apparent connection leak detected
    at nl.finicky.lemonade.database.Database.prepare(Database.java:43)
    at nl.finicky.lemonade.rooms.RoomFactory.loadRoom(RoomFactory.java:25)
    at nl.finicky.lemonade.rooms.RoomFactory.<init>(RoomFactory.java:20)
    at nl.finicky.lemonade.Lemonade.main(Lemonade.java:30)

现在我知道连接泄漏意味着打开的连接在某个地方漂浮,但我不知道如何或在哪里漂浮。

下面是我的数据库类中的一个方法,根据堆栈跟踪,错误应该发生在这里。

public PreparedStatement prepare(String query) {
    PreparedStatement statement = null;

    try {
        while (statement == null) {
            statement = this.dataSource.getConnection().prepareStatement(query, 1); 
// The line triggering the error ^

            if (statement != null) {
                this.databasePool.getStorage();
            }
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        return statement;
    }
}

这只是启动语句的一个基本方法。调用它时,我使用它,然后调用resultset.close()preparedstatement.getconnection.close()preparedstatement.close()

但它告诉我连接是打开的。

我怎么解决这个?谢了!

共有1个答案

裴育
2023-03-14

稍后调用PreparedStatement.getConnection.close()只会获得一个不同的连接并将其关闭。

你不能用这种模式做你试图做的事情。调用this.datasource.getConnection().PrepareStatement(...)是从池中获取一个连接并丢弃对它的引用,之后没有人可以关闭它。即使保留了对该方法的引用,也不能关闭该方法中的连接,因为这样返回的PreparedStatement将不可用。

 类似资料:
  • 是否可以在2.3.9版本中启用泄漏检测?正如我之前在这个问题中所说,HiberNate使用的是HikariCP的2.3.3版本。截至2016年2月,他们已经升级了HikariCP的版本,但不幸的是升级到了2.3.9版本 我需要启用泄漏检测才能修复它们。我已将以下行添加到Hibernate配置文件中: 前两行运行正常,可以在调试日志中看到,但是当我添加第三行时,我无法运行应用程序。我也尝试过用代码添

  • 我的连接器类: 连接器。JAVA 这是我的DAO类(简化):UserDAO. java 在这里,我发现了关于Hikari的一些事实的问题: 您必须在HikariCP为您提供的连接实例上调用关闭() 可能是我的不起作用,因为它只是Hikari在方法中提供给我的连接的副本。

  • 我正在运行一个Spring boot Java应用程序,使用默认的HikariCP作为数据源: Hikari版本-3.4.5 在AWS EKS中运行的Spring Boot version-2.4.5 JDBI版本-3.9.1 DB-AWS RDS Postgres 我的Spring应用程序变得没有响应,因为它失去了Hikari池中的所有连接。这并不是确定地发生,但是一旦它开始发生,唯一可能的恢复

  • 我在使用具有未包装连接的HikariCP时遇到资源泄漏问题。然后代码的一点解释。 我必须使用一个未包装的连接来访问Oracle methods for Oracle . SQL . bfile。 数据源示例: 使用HikariCP-java7-2.4.12作为应用程序非常旧并且在tomcat-6上运行。这是被报告为泄漏的连接示例 以下是连接及其使用方式: 所以上面检索了一个未包装的T4CConne

  • 我尝试使用HikariCP和mariaDB数据库,但是当我尝试初始化的时候,我得到了下一个错误。 由以下原因引起:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 我的MariaDBDatabase类: 我的数据库类: 我的家伙.xml

  • 我们的项目中有Spring-boot/hibernate/PostgreSQL应用程序,并使用Hikari作为连接池。我们不断遇到以下问题:几个小时后,活动连接数增长到极限,我们得到如下错误(完整堆栈跟踪位于问题的末尾): 以下是版本信息: JPA/Hibernate配置: HikariCP配置: 完整堆栈跟踪: