我在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
答案 0 :(得分:0)
您的应用程序无法在 30 秒内获得连接,这是 HikariCP 的默认连接超时。可能有以下原因:
可能的解释是,例如,您的池大小为 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);
}