更新时间:2026-10-19 GMT+08:00

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+。

参数配置

表1 必选参数

参数

含义

示例

url

JDBC连接URL。

jdbc:mysql://host:3306/mydb

username

数据库账号。

root

password

账号密码。

******

表2 连接池容量参数

参数

默认值

含义

initialSize

0

初始化时创建的物理连接数。

minIdle

0

最小空闲连接数(保活下限)。

maxActive

8

最大活动连接数。

maxWait

-1

获取连接最大等待时间(毫秒)。

表3 连接回收与保活参数

参数

默认值

含义

建议值

说明

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