关于连接池之mysql篇
JDBC 连接池
| 参数名称 |
推荐配置 |
描述 |
| user |
- |
用户名 |
| password |
- |
密码 |
| useSSL |
false |
是否使用 SSL 加密连接,默认 true |
| allowPublicKeyRetrieval |
true |
让客户端自动从服务器请求公钥,默认 false |
| useAffectedRows |
true |
执行 UPDATE/DELETE 时,设为 true 则返回“实际修改的行数”,默认 false 返回“匹配行数” |
| serverTimezone |
UTC |
字符编码,推荐使用新参数 connectionTimeZone |
| autoReconnect |
true |
连接失效时是否自动重连,默认 false |
| failOverReadOnly |
false |
故障转移后是否设为只读模式,默认 true |
| maxReconnects |
10 |
autoReconnect=true 时的最大重试次数,默认 3 |
| socketTimeout |
60000 |
Socket 读写超时(毫秒),默认 0=无超时 |
| connectTimeout |
10000 |
Socket 连接超时(毫秒),默认 0=无超时 |
| loadBalanceStrategy |
bestResponseTime |
决定驱动如何从一群主机中选择一个来处理请求,默认 random |
DBCP 连接池
| 参数名称 |
推荐配置 |
描述 |
| username |
- |
用户名 |
| password |
- |
密码 |
| url |
- |
URL |
| driverClassName |
- |
驱动类名 |
| minIdle |
- |
最小连接数,默认0 |
| initialSize |
- |
初始化连接数,默认0 |
| maxTotal |
- |
最大连接数,默认8 |
| maxWaitMillis |
- |
获取连接超时时间,单位ms |
| maxIdle |
- |
最大空闲连接,默认8 |
C3P0 连接池
| 参数名称 |
推荐配置 |
描述 |
| user |
- |
用户名 |
| password |
- |
密码 |
| jdbcUrl |
- |
URL |
| driverClass |
- |
驱动类名 |
| minPoolSize |
- |
最小连接数,默认3 |
| initialPoolSize |
- |
初始化连接数,默认3 |
| maxPoolSize |
- |
最大连接数,默认15 |
| maxIdleTime |
- |
获取连接超时时间,单位s |
| acquireRetryAttempts |
- |
获取连接失败后的重连次数 |
| acquireRetryDelay |
- |
获取连接失败后重连的间隔时间 |
Druid 连接池
| 参数名称 |
推荐配置 |
描述 |
| username |
- |
用户名 |
| password |
- |
密码 |
| url |
- |
URL |
| driverClassName |
- |
驱动类名 |
| minIdle |
5 |
最小连接数,默认0 |
| initialSize |
5 |
初始化连接数,默认0 |
| maxActive |
20 |
最大连接数,默认8,可根据实际情况调整,机器多则每台尽量配置小点,相反就多点,但最大不允许超过30 |
| maxWait |
15000 |
获取连接超时时间,单位ms |
| testOnBorrow |
false |
配置从连接池获取连接时,是否检查连接有效性,默认true |
| testWhileIdle |
true |
获取连接后是否超时检测,默认false |
| timeBetweenEvictionRunsMillis |
15000 |
连接有效性检测时间,单位ms |
| testOnReturn |
false |
配置向连接池归还连接时,是否检查连接有效性,默认false |
| minEvictableIdleTimeMillis |
300000 |
配置一个连接在连接池中的最小生存时间,单位ms |
| maxEvictableIdleTimeMillis |
600000 |
配置一个连接在连接池中的最大生存时间,单位ms |
| validationQuery |
select 1 |
|
| keepAlive |
true |
|
| phyMaxUseCount |
100000 |
|
| remove-abandoned |
true |
开启连接池回收 |
| remove-abandoned-timeout |
300 |
超时连接回收时间,单位s |
HikariCP 连接池
| 参数名称 |
推荐配置 |
描述 |
| username |
- |
用户名 |
| password |
- |
密码 |
| jdbcUrl |
- |
URL |
| minimumIdle |
5 |
池中最小空闲连接数量,默认10 |
| maximumPoolSize |
20 |
池中最大连接数(包括空闲和正在使用的连接),默认10 |
| maxLifetime |
1800000 |
默认1800000毫秒 |
| connectionTimeout |
60000 |
连接超时时间,默认30000毫秒 |
| validationTimeout |
- |
默认5000毫秒 |
| loginTimeout |
- |
默认30 |
| idleTimeout |
300000 |
默认600000毫秒 |
| cachePrepStmts |
true |
xxx |
| isAutoCommit |
true |
默认true |
- 补:2025.12.09 上百个java后台导致mysql将近4000个sleep心跳连接(总共4100),如下是优化之后(从4100减到2500)的 HikariCP 连接池配置,仅供参考
注:minimum-idle 默认与 maximum-pool-size 一致(默认10),这个才是连接过多的核心
spring.datasource.hikari.connection-timeout=60000
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=300000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.validation-timeout=5000