Alibaba Druid主要配置詳解
Alibaba Druid主要配置
連接配置
spring.datasource.druid.initial-size 初始連接數(shù)
描述:
- 初始連接數(shù),初始連接數(shù)并非在應(yīng)用啟動后立即創(chuàng)建,而是首次執(zhí)行SQL操作時才會初始化指定數(shù)量的物理連接;
- 建議與min-idle一致。
- 示例initial-size=5,應(yīng)用啟動后無數(shù)據(jù)庫操作時連接數(shù)為0;首次執(zhí)行SELECT時才會創(chuàng)建5個連接放入池中。
spring.datasource.druid.min-idle 最小連接數(shù)
描述:
- 最小空閑連接,連接池在任何時刻都會保持設(shè)定的空閑連接數(shù)量,即使長時間無請求也不會銷毀這些連接,避免頻繁創(chuàng)建/銷毀。
spring.datasource.druid.max-active 最大活動連接數(shù)
描述:
- 指定連接池中允許同時存在的最大活動連接數(shù)(包括正在被使用的連接和空閑連接)。
- 當(dāng)活躍連接數(shù)達到閾值時:新請求會進入等待隊列(若配置了max-wait超時時間)。
- 若等待超時或無可用連接,拋出 SQLException(如Connection is not available)
spring.datasource.druid.max-wait 獲取連接最大等待時間
描述:
- 控制服務(wù)獲取數(shù)據(jù)庫連接最大等待時間參數(shù),單位為毫秒(ms);
- 當(dāng)連接池中無可用連接時,新請求等待獲取連接的最長時間:若在等待期間有連接釋放,則請求成功獲取連接。
- 若超時仍無可用連接,拋出 SQLException(如 Connection is not available)
spring.datasource.druid.test-while-idle 空閑連接有效性檢測
描述:
- 當(dāng)設(shè)置為true時,Druid會在連接空閑時間超過time-between-eviction-runs-millis指定的間后,通過執(zhí)行validation-query(如SELECT 1)檢測連接是否有效。
- 若檢測失敗,連接會被標(biāo)記為無效并關(guān)閉,同時連接池自動創(chuàng)建新連接補充至min-idle數(shù)量。
spring.datasource.druid.time-between-eviction-runs-millis 清理無效連接的檢測間隔時間
描述:
- 定義連接池后臺線程(DestroyTask)掃描并清理無效連接的間隔時間;
- 定期清理閑置連接,避免連接因超時失效后仍被使用,單位為毫秒(ms),默認(rèn)值:60000(1分鐘)。
spring.datasource.druid.min-evictable-idle-time-millis 空閑連接最小存活時間
描述:
- 控制空閑連接最小存活時間(單位:毫秒);
- 當(dāng)連接的空閑時間超過此值時,可能被回收線程(DestroyTask)關(guān)閉。
- 默認(rèn)值:180000(30分鐘)。
- 需配合time-between-eviction-runs-millis(檢測間隔)生效,由后臺線程周期性掃描空閑連接。
spring.datasource.druid.validation-query 檢測數(shù)據(jù)庫連接有效性SQL
- 描述:指定一個輕量級SQL查詢語句(如 SELECT 1),用于以下場景:
- 連接有效性檢測:當(dāng)啟用test-while-idle或test-on-borrow時,通過執(zhí)行該SQL驗證連接是否有效。
- 空閑連接回收:后臺線程定期掃描空閑連接,對空閑時間超閾值的連接執(zhí)行該語句,失敗則關(guān)閉無效連接
spring.datasource.druid.test-on-borrow 控制連接借出時有效性驗證
描述:
- 當(dāng)test-on-borrow=true時,應(yīng)用每次從連接池申請連接時,會同步執(zhí)行validation-query(如 SELECT 1)驗證連接是否有效。
- 若驗證失敗,則丟棄該連接并重新申請一個新連接。(生產(chǎn)環(huán)境配置建議禁用)
spring.datasource.druid.test-on-return 歸還連接時有效性驗證
描述:
- 當(dāng) test-on-return=true 時,應(yīng)用將連接歸還到連接池前,會同步執(zhí)行validation-query(如 SELECT 1)驗證連接是否有效。
- 若驗證失敗,連接會被直接丟棄而非放回池中。(生產(chǎn)環(huán)境配置建議禁用)
spring.datasource.druid.pool-prepared-statements?預(yù)編譯語句緩存
描述:
- 當(dāng)為true時,Druid會為每個數(shù)據(jù)庫連接緩存預(yù)編譯的SQL語句(PreparedStatement),避免重復(fù)編譯相同 SQL,提升執(zhí)行效率。
- 默認(rèn)值false
spring.datasource.druid.max-pool-prepared-statement-per-connection-size單個連接預(yù)編譯語句緩存數(shù)量上限
描述:
- 指定每個物理連接可緩存的 PreparedStatement 對象數(shù)量上限(默認(rèn)值 20)。
- 需配合pool-prepared-statements=true生效:當(dāng)此值>0時,自動啟用 PreparedStatement 緩存。
- 避免相同SQL重復(fù)編譯,提升高頻重復(fù)查詢性能(如批量操作),實測可降低 20%~30%的SQL執(zhí)行時間。
spring.datasource.druid.filters 過濾器鏈??
描述:
- 指定啟用的過濾器鏈。
- 這些過濾器在SQL執(zhí)行前后攔截操作,提供監(jiān)控、安全、日志等擴展功能。
- 如:filters: stat,wall,slf4j # 啟用監(jiān)控、防火墻、日志過濾器。
- 若需使用Druid內(nèi)置的SQL監(jiān)控頁面(如 localhost:8080/druid/sql.html),必須啟用 stat 過濾器,否則無法采集SQL執(zhí)行數(shù)據(jù)
spring.datasource.druid.connection-properties鍵值對形式傳遞自定義參數(shù)
描述:
- 通過分號“;”分隔的鍵值對(如 key1=value1;key2=value2),向Druid內(nèi)部組件傳遞配置參數(shù),影響連接池行為或擴展功能
spring.datasource.druid.use-global-data-source-stat合并多個數(shù)據(jù)源監(jiān)控統(tǒng)計
描述:
- 用于合并多個數(shù)據(jù)源監(jiān)控統(tǒng)計的關(guān)鍵配置項,主要作用是將應(yīng)用中多個 DruidDataSource 實例的監(jiān)控數(shù)據(jù)聚合為全局視圖,便于統(tǒng)一分析,當(dāng)應(yīng)用中存在多個數(shù)據(jù)源(如主從庫、多租戶庫)時,啟用 use-global-data-source-stat: true 會將所有DruidDataSource 的統(tǒng)計信息(如 SQL 執(zhí)行次數(shù)、耗時、連接數(shù)等)合并展示在 Druid 監(jiān)控頁面的“數(shù)據(jù)源”標(biāo)簽頁下。
- 未啟用時:每個數(shù)據(jù)源獨立統(tǒng)計,監(jiān)控頁面需切換不同數(shù)據(jù)源查看數(shù)據(jù)。啟用后:監(jiān)控頁直接展示所有數(shù)據(jù)源的匯總數(shù)據(jù),降低分析復(fù)雜度。
- 每個 DruidDataSource 默認(rèn)會創(chuàng)建獨立的 JdbcDataSourceStat 對象收集統(tǒng)計信息。
- 啟用全局統(tǒng)計后,多個數(shù)據(jù)源共享同一個統(tǒng)計對象,減少內(nèi)存占用和計算開銷。
監(jiān)控頁面配置
spring.datasource.druid.stat-view-servlet.enabled 控制監(jiān)控頁面是否啟用
描述:
- 當(dāng)設(shè)置為 true 時,Druid 會注冊一個StatViewServlet,提供內(nèi)置的Web監(jiān)控頁面(訪問路徑默認(rèn)為 /druid/*),用于可視化查看數(shù)據(jù)庫連接池狀態(tài)、SQL執(zhí)行統(tǒng)計、慢查詢?nèi)罩镜汝P(guān)鍵信息。
- 默認(rèn)值false(禁用)。
spring.datasource.druid.stat-view-servlet.url-pattern監(jiān)控頁面訪問路徑配置
描述:
- 該配置項指定了 Druid 監(jiān)控頁面的 URL 路徑模式。
- 默認(rèn)值為 /druid/*,表示監(jiān)控頁面的根路徑為 http://<服務(wù)器地址>:<端口>/druid/。
- 例如:登錄頁http://localhost:8080/druid/login.html;監(jiān)控頁:http://localhost:8080/druid/sql.html
spring.datasource.druid.stat-view-servlet.login-username監(jiān)控頁面登錄用戶名
描述:
- 配置監(jiān)控頁面登錄用戶名;
- 與login-password配合使用,為監(jiān)控頁面(如 http://localhost:8080/druid/login.html)提供基礎(chǔ)安全防護,防止未授權(quán)用戶訪問敏感數(shù)據(jù)庫監(jiān)控數(shù)據(jù);
- 未配置時默認(rèn)無認(rèn)證(生產(chǎn)環(huán)境禁用此狀態(tài)),訪問監(jiān)控頁無需登錄。
spring.datasource.druid.stat-view-servlet.login-password監(jiān)控頁面登錄密碼
描述:
- 配置監(jiān)控頁面登錄密碼,與login-username配合使用,為監(jiān)控頁面(如 http://localhost:8080/druid/login.html)提供基礎(chǔ)安全防護,防止未授權(quán)用戶訪問敏感數(shù)據(jù)庫監(jiān)控數(shù)據(jù);
- 未配置時默認(rèn)無認(rèn)證(生產(chǎn)環(huán)境禁用此狀態(tài)),訪問監(jiān)控頁無需登錄。
spring.datasource.druid.stat-view-servlet.reset-enable監(jiān)控頁面的重置功能開關(guān)
描述:
- true(默認(rèn)值):啟用/禁用重置功能;監(jiān)控頁面顯示“Reset All”按鈕,點擊后可清空所有統(tǒng)計信息(如SQL執(zhí)行次數(shù)、慢SQL記錄、請求耗時等),數(shù)據(jù)從零開始重新計數(shù)。
- false:隱藏重置按鈕,防止誤操作導(dǎo)致監(jiān)控數(shù)據(jù)丟失。生產(chǎn)環(huán)境強烈建議關(guān)閉。
Web請求統(tǒng)計
spring.datasource.druid.web-stat-filter.enabled啟用Web請求關(guān)聯(lián)SQL統(tǒng)計
描述:當(dāng)設(shè)置為 true 時,Druid 的 WebStatFilter 會攔截所有 Web 請求,自動采集以下數(shù)據(jù):
- SQL 執(zhí)行詳情:包括 SQL 語句、執(zhí)行次數(shù)、耗時、慢SQL記錄。
- 請求關(guān)聯(lián)數(shù)據(jù):URL 訪問路徑、請求次數(shù)、Session活躍度、數(shù)據(jù)庫表訪問頻率等。
- 資源過濾:通過exclusions配置排除靜態(tài)資源(如JS、CSS、圖片),避免無效統(tǒng)計
監(jiān)控頁面數(shù)據(jù)支撐:啟用后,Druid監(jiān)控頁面的“URI監(jiān)控”和“Session監(jiān)控”標(biāo)簽頁會顯示實時數(shù)據(jù)。若未啟用,這些頁面將無數(shù)據(jù)。
注意!
- 啟用監(jiān)控頁面:需同時設(shè)置 stat-view-servlet.enabled=true,否則無法查看統(tǒng)計結(jié)果。
- 啟用SQL監(jiān)控:需配置 filters: stat,否則SQL執(zhí)行詳情無法采集
spring.datasource.druid.web-stat-filter.url-pattern過濾器的攔截路徑配置
描述:
- 該配置指定了 Druid 的 WebStatFilter 需要攔截哪些 URL 路徑的請求,以采集與數(shù)據(jù)庫操作相關(guān)的統(tǒng)計信息(如 SQL 執(zhí)行詳情、請求耗時、Session 活躍度等)。
- 默認(rèn)值:/(攔截所有請求)。
- 典型場景:需監(jiān)控所有業(yè)務(wù)接口的數(shù)據(jù)庫訪問行為時,保持默認(rèn)值即可;若需縮小范圍,可調(diào)整為 /api/ 等特定路徑。
關(guān)聯(lián)數(shù)據(jù)采集,僅被攔截的請求才會生成以下監(jiān)控數(shù)據(jù):
- SQL監(jiān)控頁:SQL 執(zhí)行次數(shù)、慢 SQL 記錄。
- URI監(jiān)控頁:每個接口的請求次數(shù)、平均耗時、數(shù)據(jù)庫表訪問頻率。
- Session 監(jiān)控頁:用戶會話的活躍時長、請求次數(shù)等(需額外啟用 session-stat-enable=true)
spring.datasource.druid.web-stat-filter.exclusions靜態(tài)資源排除配置
描述:
指定哪些URL路徑不參與數(shù)據(jù)庫監(jiān)控統(tǒng)計,例如:
- 靜態(tài)資源:*.js、*.css、*.jpg、*.ico 等。
- 內(nèi)置監(jiān)控頁面:/druid/*(避免監(jiān)控自身請求)。
- 健康檢查接口:如 Spring Boot Actuator 的 /actuator/health
SQL性能監(jiān)控
spring.datasource.druid.filter.stat.log-slow-sql啟用慢 SQL記錄功能
描述:
- 當(dāng)設(shè)置為 true 時,Druid會捕獲執(zhí)行時間超過閾值(由slow-sql-millis定義)的SQL語句,并將其輸出到日志文件中。
- 默認(rèn)值:false(未啟用),需手動開啟。
- 若啟用log-slow-sql: true,慢SQL會輸出到日志文件。
spring.datasource.druid.filter.stat.slow-sql-millis定義慢 SQL判定閾值
描述:
- 定義慢SQL標(biāo)準(zhǔn);當(dāng)SQL執(zhí)行時間超過設(shè)定閾值時,Druid會將其標(biāo)記為慢SQL。默認(rèn)值3000(3秒)
spring.datasource.druid.filter.stat.db-type數(shù)據(jù)庫類型
描述:
Druid的StatFilter需根據(jù)數(shù)據(jù)庫類型(如 MySQL、Oracle)解析SQL語法,以正確統(tǒng)計以下信息:
- SQL執(zhí)行詳情:執(zhí)行次數(shù)、耗時、慢SQL識別。
- 執(zhí)行計劃分析:識別 SQL 結(jié)構(gòu)(如 SELECT/UPDATE)并關(guān)聯(lián)性能數(shù)據(jù)。
- 若未配置 db-type,可能因語法差異導(dǎo)致統(tǒng)計錯誤(如 Oracle 分頁語句解析失敗)
spring.datasource.druid.filter.stat.merge-sql是否合并統(tǒng)計結(jié)構(gòu)相同但格式不同的SQL語句
描述:
- 當(dāng)merge-sql=true時,Druid會將語義相同但格式不同的SQL(如空格、換行符差異)合并為同一條統(tǒng)計記錄;
- 合并后顯著降低內(nèi)存占用和統(tǒng)計信息數(shù)量,提升監(jiān)控效率,尤其在高并發(fā)場景下。
SQL防火墻
spring.datasource.druid.wall.enabled啟用SQL防火墻開關(guān)
描述:
- 當(dāng)設(shè)置為true時,Druid會激活內(nèi)置的WallFilter,對所有執(zhí)行的 SQL 進行安全審計,攔截危險操作(如 SQL 注入、無 WHERE 的 DELETE/UPDATE、DROP TABLE 等);
- 默認(rèn)值:false。
spring.datasource.druid.wall.config.drop-table-allow 禁止刪除表開關(guān)
描述:
- 當(dāng)設(shè)置為false(默認(rèn)值)時:禁止執(zhí)行DROP TABLE、DROP VIEW 等刪表操作,防止誤刪或惡意刪除數(shù)據(jù)庫表結(jié)構(gòu)。
- 當(dāng)設(shè)置為true 時:允許執(zhí)行刪表操作(生產(chǎn)環(huán)境強烈不推薦)。
spring.datasource.druid.wall.config.truncate-allow禁止清空表開關(guān)
描述:
- 當(dāng)設(shè)置為false(默認(rèn)值)時禁止執(zhí)行TRUNCATE TABLE操作,防止誤刪或惡意清空整張表的數(shù)據(jù)(該操作不可回滾,且不觸發(fā)觸發(fā)器)。
- 設(shè)置為true時允許執(zhí)行TRUNCATE操作(生產(chǎn)環(huán)境強烈不推薦)
spring.datasource.druid.wall.config.delete-allow禁止無WHERE條件的DELETE操作開關(guān)
描述:
- 當(dāng)設(shè)置為false時,Druid會攔截所有 DELETE 語句,防止誤刪或惡意刪除數(shù)據(jù)。
- 默認(rèn)值true(允許執(zhí) DELETE語句)
spring.datasource.druid.wall.config.select-all-column-allow禁止SELECT *開關(guān)
- 描述:當(dāng)設(shè)置為false時,Druid會攔截所有 SELECT * FROM table 這類查詢語句。
- 默認(rèn)值true(允許執(zhí)行 SELECT * 查詢)
spring.datasource.druid.wall.config.condition-and-always-true-allow攔截永真條件開關(guān)
描述:
- 若設(shè)置為true,允許SQL中出現(xiàn) WHERE 1=1 這類條件,攻擊者可能利用此特性繞過身份驗證或批量竊取數(shù)據(jù),默認(rèn)值false
spring.datasource.druid.wall.config.multi-statement-allow禁止多語句執(zhí)行開關(guān)
描述:
- 控制是否允許單次請求執(zhí)行多條SQL語句的安全配置項。
- 默認(rèn)值false(禁止執(zhí)行多條SQL)。
- 開啟后允許通過分號;分隔執(zhí)行多條SQL(如 UPDATE table1 SET …; UPDATE table2 SET …)。
spring.datasource.druid.wall.config.function-allow控制是否允許SQL語句調(diào)用數(shù)據(jù)庫函數(shù)
描述:
默認(rèn)值false(禁止調(diào)用數(shù)據(jù)庫函數(shù));若設(shè)為 true,允許執(zhí)行如SLEEP()、LOAD_FILE()、EXEC() 等敏感函數(shù),導(dǎo)致以下攻擊:
- 時間盲注攻擊:利用 SLEEP(5) 探測數(shù)據(jù)庫結(jié)構(gòu)。
- 文件讀取/寫入:通過 LOAD_FILE(‘/etc/passwd’) 竊取系統(tǒng)文件。
- 命令執(zhí)行:調(diào)用 EXEC(‘rm -rf /’) 破壞系統(tǒng)(部分?jǐn)?shù)據(jù)庫支持)
spring.datasource.druid.wall.config.read-only-tables配置只讀表
描述:
- 通過配置表名(支持正則表達式),禁止對這些表執(zhí)行 INSERT/UPDATE/DELETE 等寫操作;
- 如:read-only-tables: user, config_.* #禁止修改user表和config_前綴的表
spring.datasource.druid.wall.config.log-violation控制是否記錄被攔截SQL語句
描述:
- 默認(rèn)值false(不記錄攔截的 SQL)。
- 若設(shè)置為true,當(dāng)SQL語句觸發(fā)防火墻規(guī)則(如執(zhí)行SELECT *、永真條件 WHERE 1=1或高危操作)時,Druid會通過 LOG.error 輸出詳細(xì)的攔截日志。
- 日志內(nèi)容包含違規(guī)SQL、攔截原因、執(zhí)行時間等信息,便于安全審計。
spring.datasource.druid.wall.config.throw-exception是否對違規(guī)SQL拋出異常
描述:
- 默認(rèn)值:true(檢測到高危SQL時拋出 SQLException 阻斷執(zhí)行),若設(shè)置為false僅記錄攔截日志(需配合 log-violation=true),不中斷請求,存在安全風(fēng)險。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于Java中增強for循環(huán)使用的注意事項
for循環(huán)語句是java循環(huán)語句中最常用的循環(huán)語句,一般用在循環(huán)次數(shù)已知的情況下使用,這篇文章主要給大家介紹了關(guān)于Java中增強for循環(huán)使用的注意事項,需要的朋友可以參考下2021-06-06
SpringBoot應(yīng)用是否存在MySQL連接泄漏問題的排查方法
這篇文章主要介紹了排查SpringBoot應(yīng)用MySQL連接泄漏的方法,需檢查連接數(shù)、空閑連接,配置連接池參數(shù),確保資源關(guān)閉,并使用監(jiān)控工具如Actuator和Prometheus分析,需要的朋友可以參考下2025-06-06
在js與java中判斷json數(shù)據(jù)中是否含有某字段的案例
這篇文章主要介紹了在js與java中判斷json數(shù)據(jù)中是否含有某字段的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12

