Druid连接池心跳与空闲连接回收配置指南

文章目录

数据源配置

问题背景:

长期运行的应用在低峰期可能出现部分业务请求报 SQL 执行超时 或 类似 The last packet successfully received from the server was xxx milliseconds ago. 的连接异常,但瞬间重试又能正常访问。这个现象常见于连接被远端或中间网络设备(如防火墙/NAT)关闭或回收后未及时重连导致的错误

问题原因:

  1. 默认超时机制:数据库如Mysql存在超时机制,若连接空闲超过一段时间(可设置),数据库主动关闭连接,导致客户端请求时异常。
  2. 防火墙/NAT会话超时:中间网络设备可能设置更短的TCP会话超时(如30分钟),也会导致连接失效。

解决方式:

推荐配置:

在 jdbc.yml 的数据源配置中加入心跳与空闲连接回收相关配置,可以显著降低此类错误:

xml 复制代码
url: jdbc:xxx://ip:port/dbname?param1=xx1&param2=xx2 #jdbc url连接配置
driverClassName: com.goldendb.jdbc.Driver #国产数据库驱动按需要配置
username: xxx 
password: xxx
initialSize: 2 #连接池初始化大小,根据业务场景配置,默认0
minIdle: 2     #连接池最小空闲连接数,根据业务场景配置,默认0 
maxActive: 32#连接池最大连接数,根据业务场景配置,默认8
maxWait: 60000  #连接池最大等待时间,根据业务场景配置,默认-1无限制
keepAlive: true #是否开启连接心跳保活,默认false
validationQuery: SELECT 1 FROM DUAL #心跳是用的sql,默认不配置,会根据driverClassName来自动配置,mysql是SELECT 1  oracle是 SELECT 1 FROM DUAL , 也可以使用查询业务空表来做心跳
minEvictableIdleTimeMillis: 300000 #空闲5分钟以上的连接被移除,但会保留minIdle配置的连接数不进行移除, 默认30分钟
maxEvictableIdleTimeMillis: 1800000 #空闲30分钟以上的连接被移除,与minIdle无关, 默认7小时
  • 关键项说明:
xml 复制代码
keepAlive: true # 开启连接心跳;是否开启连接心跳保活,默认false
validationQuery # 心跳/校验语句

空闲回收策略是解决问题的核心

xml 复制代码
minEvictableIdleTimeMillis # 最小空闲连接时间
maxEvictableIdleTimeMillis # 最大空闲连接时间

1、keepAlive 打开后,连接池会定期执行 validationQuery 检测连接是否可用,遇到不可用连接会回收并重建。

2、validationQuery 根据数据库类型选择(MySQL 常用 SELECT 1,Oracle 常用 SELECT 1 FROM DUAL),也可以用一个查询空表的业务语句作为心跳。

3、minEvictableIdleTimeMillis/maxEvictableIdleTimeMillis 控制空闲连接何时被回收:合理设置能在保证性能的同时避免长期空闲连接被底层网络/数据库回收导致的问题。

相关推荐
·薯条大王8 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
ZJH__GO11 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆11 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光11 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林11 小时前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
marvelyu12 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
AI人工智能+电脑小能手13 小时前
大白话说Java设计模式-04-工厂方法模式(业务实战篇)
java·设计模式·工厂方法模式·架构设计·代码解耦
BUG指挥官13 小时前
Sa-Token和Spring Security对比
java·后端·spring
小当家.10514 小时前
深入理解 ReAct Agent:从原理到 Java 实战
java·react.js·agent·react·架构设计·agent设计
geminigoth14 小时前
Spring AI Alibaba 入门开发一(备份)
java·人工智能·spring