SpringBoot Druid配置過程圖解
阿新 • • 發佈:2020-03-27
Druid是阿里開源的一個JDBC應用元件, 其包括三部分:
- DruidDriver: 代理Driver,能夠提供基於Filter-Chain模式的外掛體系。
- DruidDataSource: 高效可管理的資料庫連線池。
- SQLParser: 實用的SQL語法分析
通過Druid連線池中介軟體, 我們可以實現:
- 可以監控資料庫訪問效能,Druid內建提供了一個功能強大的StatFilter外掛,能夠詳細統計SQL的執行效能,這對於線上分析資料庫訪問效能有幫助。
- 替換傳統的DBCP和C3P0連線池中介軟體。Druid提供了一個高效、功能強大、可擴充套件性好的資料庫連線池。
- 資料庫密碼加密。直接把資料庫密碼寫在配置檔案中,容易導致安全問題。DruidDruiver和DruidDataSource都支援PasswordCallback。
- SQL執行日誌,Druid提供了不同的LogFilter,能夠支援Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的資料庫訪問情況。
- 擴充套件JDBC,如果你要對JDBC層有程式設計的需求,可以通過Druid提供的Filter-Chain機制,很方便編寫JDBC層的擴充套件外掛。
配置程式碼如下
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://${url}:${port}/${資料庫名}?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&allowMultiQueries=true&useAffectedRows=true username: ${username} password: ${password} druid: initial-size: 10 # 初始化時建立物理連線的個數。初始化發生在顯示呼叫init方法,或者第一次getConnection時 min-idle: 10 # 最小連線池數量 maxActive: 200 # 最大連線池數量 maxWait: 60000 # 獲取連線時最大等待時間,單位毫秒。配置了maxWait之後,預設啟用公平鎖,併發效率會有所下降,如果需要可以通過配置 timeBetweenEvictionRunsMillis: 60000 # 關閉空閒連線的檢測時間間隔.Destroy執行緒會檢測連線的間隔時間,如果連線空閒時間大於等於minEvictableIdleTimeMillis則關閉物理連線。 minEvictableIdleTimeMillis: 300000 # 連線的最小生存時間.連線保持空閒而不被驅逐的最小時間 validationQuery: SELECT 1 FROM DUAL # 驗證資料庫服務可用性的sql.用來檢測連線是否有效的sql 因資料庫方言而差,例如 oracle 應該寫成 SELECT 1 FROM DUAL testWhileIdle: true # 申請連線時檢測空閒時間,根據空閒時間再檢測連線是否有效.建議配置為true,不影響效能,並且保證安全性。申請連線的時候檢測,如果空閒時間大於timeBetweenEvictionRun testOnBorrow: false # 申請連線時直接檢測連線是否有效.申請連線時執行validationQuery檢測連線是否有效,做了這個配置會降低效能。 testOnReturn: false # 歸還連線時檢測連線是否有效.歸還連線時執行validationQuery檢測連線是否有效,做了這個配置會降低效能。 poolPreparedStatements: true # 開啟PSCache maxPoolPreparedStatementPerConnectionSize: 20 #設定PSCache值 connectionErrorRetryAttempts: 3 # 連接出錯後再嘗試連線三次 breakAfterAcquireFailure: true # 資料庫服務宕機自動重連機制 timeBetweenConnectErrorMillis: 300000 # 連接出錯後重試時間間隔 asyncInit: true # 非同步初始化策略 remove-abandoned: true # 是否自動回收超時連線 remove-abandoned-timeout: 1800 # 超時時間(以秒數為單位) transaction-query-timeout: 6000 # 事務超時時間 filters: stat,wall,log4j2 connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 web-stat-filter: enabled: true url-pattern: "/*" exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" stat-view-servlet: url-pattern: "/druid/*" allow: deny: reset-enable: false login-username: admin login-password: admin
druid監控資料的外部化呼叫
@RestController public class DruidStatController { @GetMapping("/stat") public Object druidStat() { // DruidStatManagerFacade#getDataSourceStatDataList 該方法可以獲取所有資料來源的監控資料 return DruidStatManagerFacade.getInstance().getDataSourceStatDataList(); } }
圖例
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。