HikariPool-1 –连接不可用,请求在30000毫秒后超时

时间:2019-08-03 04:57:25

标签: spring-boot hikaricp

我在SpringBoot 2.0.1应用程序中使用标准的HikariCP实现。但是一段时间后,我一遍又一遍地得到相同的错误

  

HikariPool-1 –连接不可用,请求在30000ms后超时

我首先检查代码是否存在未关闭的连接或缺少事务注释,但没有发现任何问题。然后,我还尝试在我的application.yml中增加池并减少超时,但是似乎没有任何作用。

奇怪的是,HikariCP似乎只能创建4个池连接,而我无法覆盖这些属性。

HikariPool-1-超时失败统计信息(总数= 4,活动= 4,空闲= 0,等待= 100)

这是我的application.yml文件

spring:
  jpa:
    hibernate:
      ddl-auto: update
  datasource:
      hikari:
        maximum-pool-size: 64
        connection-timeout: 5000

1 个答案:

答案 0 :(得分:0)

您的应用程序无法在 30 秒内获得连接,这是 HikariCP 的默认连接超时。可能有以下原因:

  1. Pool 规模较小,请求执行时间过长(超过 30 秒)。

可能的解释是,例如,您的池大小为 1,并且您的一个请求/查询大约需要 500 毫秒才能执行。假设您打开了例如大约 200 个并发查询请求,那么某些请求可能会超时。 (一个请求已等待 30 秒,但没有可用的连接)。

免责声明:随机抽取数字进行解释,未经测试。

要解决此问题,您可能需要增加 connectionTimeout 或增加池大小。 (还要检查内存要求)。

在 application.properties 中设置值

   spring.datasource.hikari.minimumIdle=10
   spring.datasource.hikari.maximumPoolSize=10
   spring.datasource.hikari.idleTimeout=120000
   spring.datasource.hikari.maxLifetime=500000

Official Hikari CP documentation link

可能还有另一个原因是您的连接没有正确关闭,请使用 try-with-resources 关闭您的连接 例如

        try(Connection c = dataSource.getConnection()) {
        //ToDo: Add your logic statement here
        log.debug("[d] Tenant '{}' added.", tenantId);
   }