1. 程式人生 > 程式設計 >SpringBoot Druid配置過程圖解

SpringBoot Druid配置過程圖解

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();
  }
}

圖例

SpringBoot Druid配置過程圖解

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。