You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring配置Hikari连接池解决并发请求连接耗尽超时问题

Hikari连接池满时的超时问题解决方案

澄清误解

你找的waiting_when_reached_max_connection这类配置是不存在的——HikariCP默认就会在连接池达到上限时,让后续请求排队等待可用连接。你看到的超时错误,不是因为没有等待,而是等待时间超过了设定的阈值。

错误日志解析

日志里的(total=100, active=100, idle=0, waiting=57)已经说明:

  • 连接池总大小100,所有连接都处于活跃状态
  • 没有空闲连接可用
  • 有57个请求正在排队等待连接
  • 这些请求等待了约5秒(5047ms)后仍未获取到连接,触发超时抛出异常

具体解决方案

  • 调整连接等待超时时间
    通过spring.datasource.hikari.connection-timeout配置延长等待时长,比如设置为60000(单位:毫秒,即1分钟):

    spring.datasource.hikari.connection-timeout=60000
    

    注意:不要设置过长,避免请求长时间挂起影响用户体验。

  • 优化连接使用效率

    • 确保连接用完即释放:使用try-with-resources语法自动关闭连接/Statement/ResultSet,避免手动关闭遗漏导致连接泄漏
    • 缩短连接持有时间:不要在数据库事务中执行非DB操作(比如调用外部API、文件IO),减少连接被占用的时间
  • 合理调整连接池大小
    连接池不是越大越好,过大的池会增加数据库的上下文切换开销,反而降低性能。推荐参考公式:(CPU核心数 × 2) + 磁盘数量,比如8核服务器建议设置为17左右。需结合数据库的实际承载能力调整,而非盲目调大到100。

  • 检测连接泄漏
    开启Hikari的连接泄漏检测,配置spring.datasource.hikari.leak-detection-threshold(单位:毫秒),当连接超过设定时间未释放时,会打印泄漏栈信息:

    spring.datasource.hikari.leak-detection-threshold=2000
    

内容的提问来源于stack exchange,提问作者Nguyen Manh Cuong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 10:59:59