文章目錄
- 前置
- 配置方式
- 參數解釋
前置
- 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 | 自定 |
空閑連接:當一個連接使用完畢,并通過相應的歸還機制(例如關閉連接對象)返回到連接池中時,它就成為了空閑連接,等待下一次被獲取和使用
活躍連接:未歸還到連接池的
空閑時:定義空閑時,即上一次連接歸還,到下一次連接被請求使用 之間的時間