文章目录
- 前置
- 配置方式
- 参数解释
前置
- springboot 项目
- java
- mysql
- druid 连接池
配置方式
在 springboot 的 application.yml 中配置基本方式
# Druid 配置(Spring Boot YAML 格式)
spring:datasource:url: jdbc:mysql://localhost:3306/testdb?useSSL=falseusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverdruid:initial-size: 5min-idle: 5max-active: 20max-wait: 60000time-between-eviction-runs-millis: 60000validation-query: SELECT 1test-while-idle: truetest-on-borrow: falsetest-on-return: false
参数解释
参数名 | 说明 | 默认值 | 推荐值 |
---|---|---|---|
连接池配置: | |||
initialSize | 初始化时创建的物理连接数 | 0 | 如 5 |
minIdle | 最小空闲连接; | 0 | 通常设置为 5~10 |
maxActive | 最大活跃连接数(同时可使用的连接数上限) | 8 | 如 20~100 |
maxWait | 获取连接的最大等待时间(毫秒),超时抛出异常。 | -1 无限等待 | 设置为 5000~60000,避免线程长时间阻塞 |
连接验证和保活: | |||
validationQuery | 检测连接是否有效的 SQL(如 SELECT 1) | 无 | SELECT 1 |
testWhileIdle | 空闲时检查连接有效性 | true | true |
连接回收与驱逐: | |||
timeBetweenEvictionRunsMillis | 空闲连接检查间隔(毫秒),举例子:如果一个连接在 10:00 被归还到池中,且 timeBetweenEvictionRunsMillis 为 60 秒,则在 10:01 时,该连接的空闲时间已超过阈值,会触发检测 | 60000(1分钟) | 60000(1分钟) |
minEvictableIdleTimeMillis | 空闲连接的最小存活时间(超过此值可能被驱逐);空闲连接数 > minIdle 且 空闲时间 > 该值,回收多余的空闲连接 | 1800000(30分钟) | 1800000(30分钟) |
maxEvictableIdleTimeMillis | 空闲连接的最大存活时间(超过此值强制驱逐);空闲时间 > 该值,强制回收所有超时的空闲连接 | 25200000(7小时) | 25200000(7小时) |
性能优化: | |||
poolPreparedStatements | 是否缓存 PreparedStatement | false | 高频查询时设为 true |
maxPoolPreparedStatementPerConnectionSize | 每个连接缓存的 PreparedStatement 数量 | 10 | 自定义设置 |
性能优化: | |||
removeAbandoned | 是否回收未归还的连接(如程序异常退出) | false,默认 false 是因为其对性能有影响,而且有些业务处理中连接就是很久未归还,默认如果是 true 会带来业务困扰 | 高并发下设置true |
removeAbandonedTimeout | 回收未归还连接的超时时间(秒) | 300 | 自定 |
空闲连接:当一个连接使用完毕,并通过相应的归还机制(例如关闭连接对象)返回到连接池中时,它就成为了空闲连接,等待下一次被获取和使用
活跃连接:未归还到连接池的
空闲时:定义空闲时,即上一次连接归还,到下一次连接被请求使用 之间的时间