# 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
```
