HikariCP 连接泄漏检测和休眠

HikariCP connection leak detection and hibernate

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

我需要启用泄漏检测才能修复它们。 我在休眠配置文件中添加了以下行:

<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]

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

<property name="hibernate.hikari.leakDetectionThreshold">30000</property>

对我来说,leakDetectionThreshold 属性 没有按预期工作。尝试增加其余的 'timeout' 属性,看看什么适合您。

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

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

另外,看看这个