日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DruidDataSource配置说明

發布時間:2023/12/20 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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相關配置,用來關閉長時間不使用的連接。例如:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">... ...<property name="removeAbandoned" value="true" /> <!-- 打開removeAbandoned功能 --><property name="removeAbandonedTimeout" value="1800" /> <!-- 1800秒,也就是30分鐘 --><property name="logAbandoned" value="true" /> <!-- 關閉abanded連接時輸出錯誤日志 -->... ...</bean>

配置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配置说明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。