Druid连接池最佳实践
本章节面向TaurusDB应用接入,介绍Druid连接池的核心参数说明与配置示例。TaurusDB兼容MySQL协议,应用侧通过标准MySQL JDBC驱动即可接入。Druid的核心优势在于内置SQL监控、连接保活与连接池级自动重连。
推荐版本
| 组件 | 推荐版本 | 说明 |
| Druid | 1.2.20及以上,生产建议1.2.24或更新稳定版 | 低于1.2.6的keepAlive存在缺陷。 |
| MySQL JDBC 驱动 | mysql-connector-j 8.0.33及以上 | 与 TaurusDB 8.0 内核协议兼容。 |
| JDK | Java 8 及以上 | Druid 1.2.x 支持 Java 8+。 |
参数配置
| 参数 | 含义 | 示例 |
|---|---|---|
| url | JDBC连接URL。 | jdbc:mysql://host:3306/mydb |
| username | 数据库账号。 | root |
| password | 账号密码。 | ****** |
| 参数 | 默认值 | 含义 |
|---|---|---|
| initialSize | 0 | 初始化时创建的物理连接数。 |
| minIdle | 0 | 最小空闲连接数(保活下限)。 |
| maxActive | 8 | 最大活动连接数。 |
| maxWait | -1 | 获取连接最大等待时间(毫秒)。 |
| 参数 | 默认值 | 含义 | 建议值 | 说明 |
|---|---|---|---|---|
| timeBetweenEvictionRunsMillis | 60000 | 回收线程间隔(毫秒) | 60000(60秒) | 若希望尽快回收空闲连接,则调小;若对DB检测压力或线程开销敏感,则调大。 |
| minEvictableIdleTimeMillis | 1800000 | 最小空闲回收时间(毫秒) | 1800000(30 分钟) | 若希望快速释放空闲连接,则调小;若希望连接常驻以减少重建开销,则调大。 |
| maxEvictableIdleTimeMillis | 25200000 | 最大空闲强制回收时间(毫秒) | 25200000(7 小时) | 若数据库wait_timeout值较小,则调小至低于该值,避免被动断连;若希望连接长期复用,则调大。 |
| keepAlive | false | 对 minIdle 内连接发心跳保活 | true | 主备倒换或空闲断连场景必须开启true;连接数极少、每次新建可接受,可设置为false。 |
| keepAliveBetweenTimeMillis | 120000 | 保活心跳间隔(毫秒) | 120000 | 若数据库wait_timeout值较小,则调小至低于该值;若对检测开销敏感,则调大。 |
| validationQuery | 无 | 检测有效性的 SQL,如 SELECT 1 | SELECT 1 | 必须设置,否则 testOnBorrow/testWhileIdle等检测不生效。 |
| validationQueryTimeout | -1 | 检测 SQL 超时(秒) | 3(秒) | validationQuery的超时时间,默认 -1(无限等待)。生产环境不建议保持默认值,可能阻塞检测线程。 |
| testOnBorrow | false | 获取连接时检测有效性 | false | true对性能影响较大,建议保持false。 |
| testOnReturn | false | 归还连接时检测有效性 | false | 一般无需开启。归还前连接已失效概率极低,开启徒增开销;仅连接质量极差环境考虑。 |
| testWhileIdle | true | 空闲时检测有效性 | true | 开销最低的兜底健康检测,建议保持true。 |
配置示例
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://<taurusdb_vip>:3306/<db>?useUnicode=true&characterEncoding=utf8& &serverTimezone=Asia/Shanghai
username: <user>
password: <password>
druid:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
keep-alive: true
keep-alive-between-time-millis: 120000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 1800000