Hikari 连接池 postgres

时间:2021-07-30 06:44:21

标签: java spring postgresql spring-boot hikaricp

我在 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 后,连接仍处于空闲状态。

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

1 个答案:

答案 0 :(得分:1)

来自Hikary documentation

<块引用>

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

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