Hikari连接池启动后创建两个连接

Hikari connection pool creates two connection after starting

我使用具有以下设置的 Hikary 连接池:

  HikariDataSource dataSource = new HikariDataSource();
        dataSource.setMinimumIdle(0);
        dataSource.setMaximumPoolSize(Integer.MAX_VALUE);
        dataSource.setJdbcUrl(jdbcConnectionString);
        dataSource.setConnectionTestQuery("select 1");
        dataSource.setIdleTimeout(TimeUnit.SECONDS.toMillis(60));
    dataSource.getConnection();

在 getConnection() 之后,hikari 尝试获取 2 个到实例的连接,但只将一个连接放入连接池。我该如何解决? hikari 版本是 3.4.0

我找到了答案。 Hikari 在 checkFailFast 方法中创建第一个连接。当找到如何禁用此方法时,我会更新此评论。如果 initializationFailTimeout<0,checkFailFast 不起作用。对我有帮助

After getConnection() hikari try to get 2 connections to instance, but put in connection pool just one connection. How can I fix it?

此行为没有任何可修复的。这很简单,两个连接被打开,其中一个被关闭。

第二个连接关闭的原因是你设置了setMinimumIdle(0),即池中没有空闲连接维护,所有空闲连接都关闭

如果你想在池中看到两个连接,简单设置 setMinimumIdle(1)。调用 DataSource.getConnection() 后,池中将有两个连接 - 一个是你的,一个是空闲的。

如果根本不想打开第二个连接,设置

    config.setMinimumIdle( 1 );
    config.setMaximumPoolSize( 1 );

但是想一想,为什么要使用只有一个连接的连接池

您以后可以 增加 两个参数,而池是 运行。

 HikariConfigMXBean bn = DataSource.ds.getHikariConfigMXBean()
 bn.setMaximumPoolSize(10)
 bn.setMinimumIdle(10)

这将(不是立即)打开 9 个额外的数据库连接。

请注意,在设置 MaximumPoolSize == MinimumIdle 时,池中的连接数保持稳定,没有打开或关闭连接,这可能是您想要观察的事情。

测试 Hicari 3.4.0Oracle 12.2