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

时间:2019-09-20 11:32:55

标签: java jdbc hikaricp

我使用具有以下设置的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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

  

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

没有任何可以解决的问题。简单的意思是,打开了两个部分,其中之一被关闭了。

第二个连接被关闭的原因是您设置了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

的测试