# JDBC连接池最佳实践
JDBC通过URL建立与数据库的会话，URL中的连接参数直接决定连接的字符集、加密、超时等行为。连接池（Druid、HikariCP等）在JDBC之上复用连接，URL参数对池中每条物理连接同样生效。本文以MySQL协议（mysql-connector-j 8.0）为例，各参数默认值与说明依据 [Connector/J 官方文档](https://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html)。
#### 标准 JDBC URL
URL格式为 jdbc:mysql://\<host\>:\<port\>/\<database\>?key1=value1\&key2=value2，?之前指定协议、主机、端口和数据库，?之后为连接参数，以 key=value 键值对形式提供，多个参数用 \& 分隔。
标准示例如下（换行仅为便于阅读，实际配置写为一行）：
```
jdbc:mysql://<host>:3306/<database>
    ?connectTimeout=10000
    &socketTimeout=60000
    &tcpKeepAlive=true
    &autoReconnect=false
```
表1参数说明 
| **参数**         | **默认值** | **含义**         | **建议值** | **说明**                                                                                                                                                         |
|:---|:---|:---|:---|:---|
| connectTimeout | 0       | 建立套接字连接的超时（毫秒） | 10000   | 主备倒换或网络不通时，避免应用线程长时间阻塞在connect阶段。仅作用于建连阶段，连接建立后不再生效。                                                                                                           |
| socketTimeout  | 0       | 套接字读取超时（毫秒）    | 60000   | 单次读操作在此时间内无数据返回即中断连接。 主备倒换、锁等待、页面获取阻塞等导致连接挂起时主动断开，避免线程无限等待；须大于业务最长查询耗时，否则误杀正常长查询。 |
| tcpKeepAlive   | true    | 是否启用TCP层探活机制   | true    | 操作系统层面保活并探测对端是否存活，建议保持true。                                                                                                                                    |
| autoReconnect  | false   | 连接失效后是否自动重连    | false   | 官方不推荐设为true，重连不可靠，会丢失会话状态、临时表、事务和用户变量。                                                                                                                         |
   
connectTimeout 与socketTimeout 建议同时配置，分别覆盖建连与读取两个阶段。任一参数为0意味着对应阶段无超时保护，生产环境不建议保持默认值0。
![](https://support.huaweicloud.com/bestpractice-taurusdb/public_sys-resources/note_3.0-zh-cn.png)
"建议值"为生产常见取值，需结合业务最长查询耗时等调整。
#### 其他常用连接参数
以下为字符集、加密、时区与性能类的常用参数，按需配置。重要性较低或未列出的参数请直接参考官网。
表2其他常用连接参数 
| **参数**            | **默认值**     | **含义**             | **建议值**                 | **说明**                                                               |
|:---|:---|:---|:---|:---|
| sslMode           | PREFERRED   | SSL/TLS 加密模式       | PREFERRED / REQUIRED    | 默认 PREFERRED（服务端支持则加密，否则明文）；生产环境建议设为REQUIRED强制加密，需确保服务端已启用TLS 且证书受信。 |
| useUnicode        | true        | 是否以Unicode方式处理字符传输 | true                    | 建议保持true，配合characterEncoding使用。                                      |
| characterEncoding | 与数据库字符集保持一致 | 连接使用的字符集           | 与数据库字符集一致（如utf8mb4）     | 建议与数据库字符集一致。                                                         |
| serverTimezone    | 与数据库时区保持一致  | 连接会话时区             | 数据库所在时区（如Asia/Shanghai） | 建议设为数据库所在时区，避免时间偏差或时区报错。                                             |
   
