首页 / 资讯中心 / 文章详情

应用周期性报错数据库连接关闭

应用周期性报错数据库连接关闭 ★ FEATURED ARTICLE
文章目录环境症状问题原因解决方案环境系统平台N/A版本N/A症状应用日志报错Error querying database. Cause: java.sql.SQLException: connection closed现象1、数据库服务端日志无主动断开会话记录2、应用侧连接大概每 10 分钟就会发生连接关闭随后重新建立新连接3、数据库服务器与应用服务器之间不存在防火墙、网关等网络设备配置空闲超时切断 TCP 会话。问题原因应用druid连接池配置time-between-eviction-runs-millis: 60000 # 关闭空闲连接的检测时间间隔每60秒执行一次扫描 min-evictable-idle-time-millis: 300000 # 连接空闲最少满5分钟才允许被驱逐销毁 max-evictable-idle-time-millis: 900000 # 空闲连接最大空闲时长15分钟空闲超15分钟会被销毁 test-while-idle: true # 申请连接的时候检测如果空闲时间大于timeBetweenEvictionRunsMillis执行validationQuery检测连接是否有效 test-on-borrow: true # 从池子借出连接给业务前必执行SELECT 1校验连接 test-on-return: false # 业务归还连接回池时不做校验 validationQuery: SELECT 1 # 校验连接存活的测试SQL phy-timeout-millis: 600000 # 物理连接绝对生命周期10分钟。不管忙/空闲连接创建满10分钟强制关闭重建Druid 连接池配置 phy‑timeout‑millis: 600000单位毫秒等价 10 分钟。该参数含义物理连接最大存活生命周期该参数不区分连接是空闲还是正在使用连接创建时间满 10 分钟Druid 连接池内部会强制销毁该物理连接并创建新连接。test-while-idle和test-on-borrow只能检测连接是否有效但无法阻止phy-timeout-millis在检测之后、业务使用之前或之中强制关闭连接。本次业务报错正是连接池内部主动销毁旧物理连接时业务恰好复用该旧连接执行业务 SQL抛出connection closed解决方案1、调大phy‑timeout‑millis例如设置为36000001 小时拉长物理连接强制重建周期大幅降低报错概率2、完全禁用 phy-timeout-millis风险连接可能无限存活需依赖 Druid 连接池配置 min-evictable-idle-time-millis、max-evictable-idle-time-millis 和数据库端超时控制。
阅读完成 · 觉得有帮助?
咨询建站