DruidDataSource配置说明
目錄
- 1. DruidDataSource配置說明
- 2. maven配置
- 3. 如果打開Druid的監控統計功能
- 4. 怎樣使用Druid的內置監控頁面
- 5. 防止sql注入配置
- 6. 參考通用配置
- 7. 連接泄漏監測
- 8. 日志記錄慢sql
- 9. 如何加密數據庫密碼
- 10. DruidDataSource支持哪些數據庫?
- 11. 如何在Spring Boot中集成Druid連接池和監控?
- 12.如何在Spring Boot中添加自定義WallConfig、Filter ?
參考文檔:https://github.com/alibaba/druid
1. DruidDataSource配置說明
- name: 配置這個屬性的意義在于,如果存在多個數據源,監控的時候可以通過名字來區分開來。如果沒有配置,將會生成一個名字,格式是:“DataSource-” + System.identityHashCode(this). 另外配置此屬性至少在1.0.5版本中是不起作用的,強行設置name會出錯
- url: 連接數據庫的url,不同數據庫不一樣。例如:mysql : jdbc:mysql://10.20.153.104:3306/druid2
oracle: jdbc:oracle:thin:@10.20.149.85:1521:ocnauto - username: 連接數據庫的用戶名
- password: 連接數據庫的密碼。如果不希望密碼直接寫在配置文件中,可以使用ConfigFilter。其作用包括:從配置文件中讀取配置;從遠程http文件中讀取配置,查看詳情配置
- driverClassName: 默認可根據URL自動識別。這一項可配可不配,如果不配置druid會根據url自動識別dbType,然后選擇相應的driverClassName。
- initialSize: 默認值0。初始化時建立物理連接的個數,初始化發生在顯示調用init方法,或者第一次getConnection時。
- maxActive: 默認值8。最大連接池數量。
- maxIdle: 已經不再使用,配置了也沒效果,可忽略。說明:maxIdle是Druid為了方便DBCP用戶遷移而增加的,maxIdle是一個混亂的概念。連接池只應該有maxPoolSize和minPoolSize,druid只保留了maxActive和minIdle,分別相當于maxPoolSize和minPoolSize。
- minIdle: 最小連接池數量。
- maxWait: 獲取連接時最大等待時間,單位毫秒。配置了maxWait之后,缺省啟用公平鎖,并發效率會有所下降,如果需要可以通過配置useUnfairLock屬性為true來使用非公平鎖。
- poolPreparedStatements: 默認值為false。是否緩存preparedStatement,也就是PSCache。PSCache對支持游標的數據庫性能提升巨大,比如說oracle。在mysql下建議關閉。
- maxPoolPreparedStatementPerConnectionSize: 默認值-1。要啟用PSCache,必須配置大于0,當大于0時,poolPreparedStatements自動觸發修改為true。在Druid中,不會存在Oracle下PSCache占用內存過多的問題,可以把這個數值配置大一些,比如說100。
- validationQuery: 用來檢測連接是否有效的sql,要求是一個查詢語句,常用select ‘X’。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會起作用。
- validationQueryTimeout: 單位:秒,檢測連接是否有效的超時時間。底層調用jdbc Statement對象的void setQueryTimeout(int seconds)方法。
- testOnBorrow: 默認值為true。申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。
- testOnReturn: 默認值為false。歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。
- testWhileIdle: 默認值為false。建議配置為true,不影響性能,并且保證安全性。申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。
- keepAlive: 1.0.28版本,默認值為false。連接池中的minIdle數量以內的連接,空閑時間超過minEvictableIdleTimeMillis,則會執行keepAlive操作。
- timeBetweenEvictionRunsMillis: 1.0.14版本,默認值為1分鐘,單位毫秒。有兩個含義:一個是Destroy線程會檢測連接的間隔時間,如果連接空閑時間大于等于minEvictableIdleTimeMillis則關閉物理連接;另一個是testWhileIdle的判斷依據,詳細看testWhileIdle屬性的說明。
- minEvictableIdleTimeMillis: 連接保持空閑而不被驅逐的最小時間,單位毫秒。
- numTestsPerEvictionRun: 不再使用,一個DruidDataSource只支持一個EvictionRun。
- connectionInitSqls: 物理連接初始化的時候執行的sql。
- exceptionSorter: 默認根據dbType自動識別。當數據庫拋出一些不可恢復的異常時,拋棄連接。
- filters: 屬性類型是字符串,通過別名的方式配置擴展插件,常用的插件有:監控統計用的filter:stat、日志用的filter:log4j、防御sql注入的filter:wall。
- proxyFilters: 類型是List<com.alibaba.druid.filter.Filter>,如果同時配置了filters和proxyFilters,是組合關系,并非替換關系。
- asyncInit: asyncInit是1.1.4中新增加的配置,如果有initialSize數量較多時,打開會加快應用啟動時間。
- maxOpenPreparedStatements: 與maxPoolPreparedStatementPerConnectionSize相同
- removeAbandoned: 當程序存在缺陷時,申請的連接忘記關閉,這時候,就存在連接泄漏了。Druid提供了RemoveAbandanded相關配置,用來關閉長時間不使用的連接。注:配置removeAbandoned對性能會有一些影響,建議懷疑存在泄漏之后再打開。在上面的配置中,如果連接超過30分鐘未關閉,就會被強行回收,并且日志記錄連接申請時的調用堆棧。
- removeAbandonedTimeout: 連接超時多長時間關閉,單位秒
- logAbandoned: 關閉abandoned連接時輸出錯誤日志。
2. maven配置
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid-version}</version> </dependency>3. 如果打開Druid的監控統計功能
Druid的監控統計功能是通過filter-chain擴展實現,如果你要打開監控統計功能,配置StatFilter,具體看這里
4. 怎樣使用Druid的內置監控頁面
內置監控頁面是一個Servlet,具體配置看這里
5. 防止sql注入配置
Druid提供了WallFilter,它是基于SQL語義分析來實現防御SQL注入攻擊的。具體配置看這里
6. 參考通用配置
DruidDataSource大部分屬性都是參考DBCP的,如果你原來就是使用DBCP,遷移是十分方便的。不同業務場景需求不同,以下配置只用來參考:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc_url}" /><property name="username" value="${jdbc_user}" /><property name="password" value="${jdbc_password}" /><property name="filters" value="stat" /><property name="maxActive" value="20" /><property name="initialSize" value="1" /><property name="maxWait" value="60000" /><property name="minIdle" value="1" /><property name="timeBetweenEvictionRunsMillis" value="60000" /><property name="minEvictableIdleTimeMillis" value="300000" /><property name="testWhileIdle" value="true" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><property name="poolPreparedStatements" value="true" /><property name="maxOpenPreparedStatements" value="20" /><property name="asyncInit" value="true" /></bean>7. 連接泄漏監測
參考信息
當程序存在缺陷時,申請的連接忘記關閉,這時候,就存在連接泄漏了。Druid提供了RemoveAbandanded相關配置,用來關閉長時間不使用的連接。例如:
配置removeAbandoned對性能會有一些影響,建議懷疑存在泄漏之后再打開。在上面的配置中,如果連接超過30分鐘未關閉,就會被強行回收,并且日志記錄連接申請時的調用堆棧。
內置監控頁面查看未關閉連接堆棧信息
當removeAbandoned=true之后,可以在內置監控界面datasource.html中的查看ActiveConnection StackTrace屬性的,可以看到未關閉連接的具體堆棧信息,從而方便查出哪些連接泄漏了。
8. 日志記錄慢sql
在StatFilter配置中有慢SQL執行日志記錄,看這里
9. 如何加密數據庫密碼
運維和DBA都不希望把密碼明文直接寫在配置文件中,Druid提供了數據庫密碼加密的功能。具體看這里
10. DruidDataSource支持哪些數據庫?
理論上說,支持所有有jdbc驅動的數據庫。實際測試過的有:
mysql 支持,大規模使用
oracle 支持,大規模使用
sqlserver 支持
postgres 支持
db2 支持
h2 支持
derby 支持
sqlite 支持
sybase 支持
11. 如何在Spring Boot中集成Druid連接池和監控?
使用Druid Spring Boot Starter,點擊查看
12.如何在Spring Boot中添加自定義WallConfig、Filter ?
點擊查看
總結
以上是生活随笔為你收集整理的DruidDataSource配置说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 根据模板及表元数据生成Controll控
- 下一篇: 2022年化工自动化控制仪表考试题模拟考