Hikari 连接池 postgres

Posted

技术标签:

【中文标题】Hikari 连接池 postgres【英文标题】:Hikari connection pool postgres 【发布时间】:2021-10-05 17:40:04 【问题描述】:

我在我的 Spring Boot 应用程序中使用 Hikari Cp。

这是我的java配置文件:-

private DataSource buildDataSource(String objectValue) 
        HikariDataSource dataSource = new HikariDataSource();
        JSONObject obj = new JSONObject(objectValue);
        dataSource.setInitializationFailTimeout(0);
        dataSource.setMaximumPoolSize(5);
        dataSource.setIdleTimeout(10000);
        dataSource.setMaxLifetime(45000);
        dataSource.setDataSourceClassName(obj.getString("dataSourceClassName"));
        dataSource.addDataSourceProperty("url", obj.getString("url"));
        dataSource.addDataSourceProperty("user", obj.getString("user"));
        dataSource.addDataSourceProperty("password", obj.getString("password"));
        return dataSource;
    


当我启动应用程序并发送第一个请求后,我会收到以下日志。

Added connection org.postgresql.jdbc.PgConnection@66c15b95
2021-07-30 12:00:02.788  INFO 17844 --- [nio-8080-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2021-07-30 12:00:02.897 DEBUG 17844 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Pool stats (total=1, active=0, idle=1, waiting=0)

几秒钟后,它立即将接下来的四个连接添加到空闲状态:-

Added connection org.postgresql.jdbc.PgConnection@6b9dc322
Added connection org.postgresql.jdbc.PgConnection@6b9dc322
Added connection org.postgresql.jdbc.PgConnection@6b9dc322
Added connection org.postgresql.jdbc.PgConnection@6b9dc322
After adding stats (total=5, active=0, idle=5, waiting=0)

我的问题在这里,我只发送了一个请求,为什么 hikira 还要添加 4 个额外的连接 并且已经是一个空闲连接,为什么不能重用相同的连接。

我已经为每个连接提供了maxLiftTime 条件,并且在 maxLiftTime 过去之后,连接仍然处于空闲状态。

所以任何建议都会有所帮助..

【问题讨论】:

dataSource.setMaximumPoolSize(5); ? 【参考方案1】:

来自Hikary documentation

?minimumIdle:此属性控制 HikariCP 尝试在池中保持的最小空闲连接数。如果空闲连接低于此值并且池中的总连接数小于 maximumPoolSize,HikariCP 将尽最大努力快速有效地添加额外的连接。但是,为了获得最大性能和对峰值需求的响应,我们建议不要设置此值,而是允许 HikariCP 充当固定大小的连接池。 默认值:与 maximumPoolSize 相同

它使用您指定的最大池大小作为 miniminimumIdle 连接。如果您根本不想要任何空闲连接,请将此值设置为 0

【讨论】:

以上是关于Hikari 连接池 postgres的主要内容,如果未能解决你的问题,请参考以下文章

HikariCP 空闲连接在连接池中保持活动状态

聊聊hikari连接池的leakDetectionThreshold

hikari为什么不需要配置连接池初始化大小

Hikari连接池

Hikari 连接池关闭连接问题

HikariCP 连接池 - '活动' - 如何调试?