HikariPool-1 - 连接不可用,请求在30000ms后为非常小的负载服务器超时

时间:2017-12-11 17:21:13

标签: java hikaricp

我有一个小的java应用程序用于测试目的。我最近搬到了hikari。我注意到的是我一直收到这个错误。

java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.
java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.
at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:602)
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:195)
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:145)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:85)

以下是我最初的hikari设置。

 HikariConfig config = new HikariConfig();
            config.setJdbcUrl("jdbc:mysql://localhost:3306/****"); 
            config.setUsername("***"); 
            config.setPassword("*****");      
            config.setMaximumPoolSize(20);  

几乎没有使用我的两个设备,我确保最终我关闭它。所以我不知道为什么它一直得到错误?可能是什么问题或者我需要更改一些设置?

4 个答案:

答案 0 :(得分:2)

我使用的是Spring Boot,但我遇到了同样的问题,我的解决方案是获得类似“ DataSourceUtils.getConnection(dataSource)”的连接。因此,我从dataSource.getConnection()更改为DataSourceUtils.getConnection(dataSource)

答案 1 :(得分:1)

由于网络延迟或某些查询执行时间过长(超过30000毫秒),您的数据库未在30000毫秒内获得连接(默认为connectionTimeout属性)。

请尝试增加属性connectionTimeout的价值。

YML配置示例:

spring:
  datasource:
    hikari:
      minimumIdle: 2
      maximumPoolSize: 10
      idleTimeout: 120000
      connectionTimeout: 300000
      leakDetectionThreshold: 300000

Java Config示例:

HikariConfig config = new HikariConfig();
        config.setMaximumPoolSize(20);
        config.setConnectionTimeout(300000);
        config.setConnectionTimeout(120000);
        config.setLeakDetectionThreshold(300000);

答案 2 :(得分:1)

就我而言,代码没有关闭连接。

尝试资源修复它:

try (
    Connection connection = dataSource.getConnection();
    Statement statement = …
) {
…
}

答案 3 :(得分:0)

花了很长时间才弄明白...就我而言,我使用了类似于 @Andres Rincon 的解决方案:

try (Connection connection = DataSourceUtils.getConnection(jdbcTemplate.getDataSource())) {
    // some code here
}