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

HikariCP连接泄漏检测和Hibernate

郎羽
2023-03-14

是否可以在2.3.9版本中启用泄漏检测?正如我之前在这个问题中所说,HiberNate使用的是HikariCP的2.3.3版本。截至2016年2月,他们已经升级了HikariCP的版本,但不幸的是升级到了2.3.9版本

我需要启用泄漏检测才能修复它们。我已将以下行添加到Hibernate配置文件中:

<property name="hibernate.hikari.maximumPoolSize">30</property>
<property name="hibernate.hikari.idleTimeout">30000</property>
<property name="hibernate.hikari.dataSource.leakDetectionThreshold">30000</property>   

前两行运行正常,可以在调试日志中看到,但是当我添加第三行时,我无法运行应用程序。我也尝试过用代码添加这个,但是还是不行。我得到以下错误:

HHH000130: Instantiating explicit connection provider: org.hibernate.hikaricp.internal.HikariCPConnectionProvider
Initial SessionFactory creation failed.org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]Initial SessionFactory creation failed.Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

共有2个答案

袁单鹗
2023-03-14

对我来说,泄漏检测阈值属性没有按预期工作。尝试增加其余的“超时”属性,看看什么对你有用。

private DataSource tenantDataSource() {
    HikariConfig config = new HikariConfig();
    config.setValidationTimeout(60000);
    config.setConnectionTimeout(60000);
    config.setIdleTimeout(60000);
    config.setInitializationFailTimeout(60000);
    config.setLeakDetectionThreshold(60000);
    ...
    the rest of the Hikari configuration
    ...
    return HikariDataSource(config);
}

当然,您也可以在.yml文件中更改这些值:

spring:
    datasource:
        hikari:
            validation-timeout: 60000
            leak-detection-threshold: 60000
            connection-timeout: 60000
            idle-timeout: 60000
            initialization-fail-timeout: 60000

仍然尝试调查为什么会发生这种情况,因为经常出现这些异常是不正常的。

还有,看一下这个问题

寿丰
2023-03-14

leakDetectionThreshold不是数据源的属性,它是特定于hikarip的。尝试将单词“dataSource”删除为:

<property name="hibernate.hikari.leakDetectionThreshold">30000</property>
 类似资料:
  • 我正在开发一个在Java服务器上运行的游戏。对于数据库池,我使用的是HikariCP,这是一个优秀的库,但它现在抛出了以下错误: 现在我知道连接泄漏意味着打开的连接在某个地方漂浮,但我不知道如何或在哪里漂浮。 下面是我的数据库类中的一个方法,根据堆栈跟踪,错误应该发生在这里。 这只是启动语句的一个基本方法。调用它时,我使用它,然后调用、和 但它告诉我连接是打开的。 我怎么解决这个?谢了!

  • 我正在运行一个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池中的所有连接。这并不是确定地发生,但是一旦它开始发生,唯一可能的恢复

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

  • 我有一个连接到Azure SQL数据库的Spring Boot应用程序。然而,当我尝试用应用程序连接到DB时,我得到了Java . lang . exception:Apparent connection leak detected error。问题是否在application.properties文件中?以下是我的application.properties文件的光值。你能帮我解决这个问题吗?

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

  • 我在webapp(hibernate-core-4.3.8。Final和Spring 3.2.11。RELEASE)上使用Spring和hibernate。我使用hikaricp(v 2.2.5)作为连接池impl,它检测连接泄漏并打印下面的stacktrac。我使用Spring的声明性事务划分,因此我假设资源的管理和清理是由Spring/hibernate完成的。因此,我认为Spring或hib