https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
Druid Spring Boot Starter
Druid Spring Boot Starter 用於幫助你在Spring Boot項目中輕松集成Druid數據庫連接池和監控。
如何使用
-
在 Spring Boot 項目中加入druid-spring-boot-starter
依賴
Maven
Gradle
-
添加配置
配置屬性
Druid Spring Boot Starter 配置屬性的名稱完全遵照 Druid,你可以通過 Spring Boot 配置文件來配置Druid數據庫連接池和監控,如果沒有配置則使用默認值。
Druid Spring Boot Starter 不僅限於對以上配置屬性提供支持,DruidDataSource
內提供setter
方法的可配置屬性都將被支持。你可以參考WIKI文檔或通過IDE輸入提示來進行配置。配置文件的格式你可以選擇.properties
或.yml
,效果是一樣的,在配置較多的情況下推薦使用.yml
。
如何配置多數據源
- 添加配置
強烈注意:Spring Boot 2.X 版本不再支持配置繼承,多數據源的話每個數據源的所有配置都需要單獨配置,否則配置不會生效
- 創建數據源
如何配置 Filter
你可以通過 spring.datasource.druid.filters=stat,wall,log4j ...
的方式來啟用相應的內置Filter,不過這些Filter都是默認配置。如果默認配置不能滿足你的需求,你可以放棄這種方式,通過配置文件來配置Filter,下面是例子。
目前為以下 Filter 提供了配置支持,請參考文檔或者根據IDE提示(spring.datasource.druid.filter.*
)進行配置。
- StatFilter
- WallFilter
- ConfigFilter
- EncodingConvertFilter
- Slf4jLogFilter
- Log4jFilter
- Log4j2Filter
- CommonsLogFilter
要想使自定義 Filter 配置生效需要將對應 Filter 的 enabled
設置為 true
,Druid Spring Boot Starter 默認會啟用 StatFilter,你也可以將其 enabled
設置為 false
來禁用它。
如何獲取 Druid 的監控數據
Druid 的監控數據可以通過 DruidStatManagerFacade 進行獲取,獲取到監控數據之后你可以將其暴露給你的監控系統進行使用。Druid 默認的監控系統數據也來源於此。下面給做一個簡單的演示,在 Spring Boot 中如何通過 HTTP 接口將 Druid 監控數據以 JSON 的形式暴露出去,實際使用中你可以根據你的需要自由地對監控數據、暴露方式進行擴展。
[
{
"Identity": 1583082378,
"Name": "DataSource-1583082378",
"DbType": "h2",
"DriverClassName": "org.h2.Driver",
"URL": "jdbc:h2:file:./demo-db",
"UserName": "sa",
"FilterClassNames": [
"com.alibaba.druid.filter.stat.StatFilter"
],
"WaitThreadCount": 0,
"NotEmptyWaitCount": 0,
"NotEmptyWaitMillis": 0,
"PoolingCount": 2,
"PoolingPeak": 2,
"PoolingPeakTime": 1533782955104,
"ActiveCount": 0,
"ActivePeak": 1,
"ActivePeakTime": 1533782955178,
"InitialSize": 2,
"MinIdle": 2,
"MaxActive": 30,
"QueryTimeout": 0,
"TransactionQueryTimeout": 0,
"LoginTimeout": 0,
"ValidConnectionCheckerClassName": null,
"ExceptionSorterClassName": null,
"TestOnBorrow": true,
"TestOnReturn": true,
"TestWhileIdle": true,
"DefaultAutoCommit": true,
"DefaultReadOnly": null,
"DefaultTransactionIsolation": null,
"LogicConnectCount": 103,
"LogicCloseCount": 103,
"LogicConnectErrorCount": 0,
"PhysicalConnectCount": 2,
"PhysicalCloseCount": 0,
"PhysicalConnectErrorCount": 0,
"ExecuteCount": 102,
"ErrorCount": 0,
"CommitCount": 100,
"RollbackCount": 0,
"PSCacheAccessCount": 100,
"PSCacheHitCount": 99,
"PSCacheMissCount": 1,
"StartTransactionCount": 100,
"TransactionHistogram": [
55,
44,
1,
0,
0,
0,
0
],
"ConnectionHoldTimeHistogram": [
53,
47,
3,
0,
0,
0,
0,
0
],
"RemoveAbandoned": false,
"ClobOpenCount": 0,
"BlobOpenCount": 0,
"KeepAliveCheckCount": 0,
"KeepAlive": false,
"FailFast": false,
"MaxWait": 1234,
"MaxWaitThreadCount": -1,
"PoolPreparedStatements": true,
"MaxPoolPreparedStatementPerConnectionSize": 5,
"MinEvictableIdleTimeMillis": 30001,
"MaxEvictableIdleTimeMillis": 25200000,
"LogDifferentThread": true,
"RecycleErrorCount": 0,
"PreparedStatementOpenCount": 1,
"PreparedStatementClosedCount": 0,
"UseUnfairLock": true,
"InitGlobalVariants": false,
"InitVariants": false
}
]
IDE 提示支持

演示
克隆項目,運行test
包內的DemoApplication
。
參考
Druid Wiki
Spring Boot Reference
微信公眾號
