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

JDBC连接池最佳实践

JDBC通过URL建立与数据库的会话,URL中的连接参数直接决定连接的字符集、加密、超时等行为。连接池(Druid、HikariCP等)在JDBC之上复用连接,URL参数对池中每条物理连接同样生效。本文以MySQL协议(mysql-connector-j 8.0)为例,各参数默认值与说明依据 Connector/J 官方文档。

标准 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。

“建议值”为生产常见取值,需结合业务最长查询耗时等调整。

其他常用连接参数

以下为字符集、加密、时区与性能类的常用参数,按需配置。重要性较低或未列出的参数请直接参考官网。

表2 其他常用连接参数

参数

默认值

含义

建议值

说明

sslMode

PREFERRED

SSL/TLS 加密模式

PREFERRED / REQUIRED

默认 PREFERRED(服务端支持则加密,否则明文);生产环境建议设为REQUIRED强制加密,需确保服务端已启用TLS 且证书受信。

useUnicode

true

是否以Unicode方式处理字符传输

true

建议保持true,配合characterEncoding使用。

characterEncoding

与数据库字符集保持一致

连接使用的字符集

与数据库字符集一致(如utf8mb4)

建议与数据库字符集一致。

serverTimezone

与数据库时区保持一致

连接会话时区

数据库所在时区(如Asia/Shanghai)

建议设为数据库所在时区,避免时间偏差或时区报错。