DruidDataSource詳解部分 一

2021-09-25 17:55:00 字數 3844 閱讀 8652

資源復用是系統效能優化中的一種常用手段,如單例,資料庫連線池,執行緒池等都是資源復用的常用技巧。 資料庫連線池的基本原理是在內部物件池中維護一定數量的資料庫連線,並對外暴露資料庫連線獲取和返回方法

和dbcp類似,druid的配置項如下

druiddatasource配置

// properties setting

mapconf = new hashedmap();

conf.put(druiddatasourcefactory.prop_driverclassname, "com.mysql.jdbc.driver");

conf.put(druiddatasourcefactory.prop_url, url);

conf.put(druiddatasourcefactory.prop_username, source.getusername());

if (stringutils.isnotblank(source.getuserpwd()))

// 配置初始化大小、最小、最大

conf.put(druiddatasourcefactory.prop_initialsize, source.getinitialsize() + "");

conf.put(druiddatasourcefactory.prop_minidle, source.getminidle()+ "");

conf.put(druiddatasourcefactory.prop_maxactive, source.getmaxactive()+ "");

druiddatasource druidds = (druiddatasource) druiddatasourcefactory.createdatasource(conf);

druidds.setbreakafteracquirefailure(true);

/** 是否快取preparedstatement,也就是pscache。 pscache對支援游標的資料庫效能提公升巨大,比如說oracle。

在mysql5.5以下的版本中沒有pscache功能,建議關閉掉。

作者在5.5版本中使用pscache,通過監控介面發現pscache有快取命中率記錄,

該應該是支援pscache*/

druidds.setpoolpreparedstatements(true);

/**settimebetweenevictionrunsmillis:

有兩個含義:

1) destroy執行緒會檢測連線的間隔時間

2) testwhileidle的判斷依據,詳細看testwhileidle屬性的說明

settestwhileidle:

建議配置為true,不影響效能,並且保證安全性。

申請連線的時候檢測,如果空閒時間大於

timebetweenevictionrunsmillis,

執行validationquery檢測連線是否有效。

*/druidds.settestwhileidle(true);

druidds.settimebetweenevictionrunsmillis(60000);

druidds.setconnectionerrorretryattempts(apiconstant.data_api_jdbc_connection_retry_count);

// 連線洩漏監測

druidds.setremoveabandoned(true);

// 是否在自動**超時連線的時候列印連線的超時錯誤

druidds.setlogabandoned(true);

// 30s=>0.5m ,1800s =>30m, 3600s =>1h,設定8小時有效

druidds.setremoveabandonedtimeout(3600 * 8 * 24);

// 配置獲取連線等待超時的時間

druidds.setmaxwait(2000);

// 單位秒,檢測連線是否有效的超時時間。底層呼叫jdbc statement物件的void setquerytimeout(int seconds)方法

druidds.setvalidationquerytimeout(source.getvalidationquerytimeout());

// 防止過期

druidds.setvalidationquery("select 'x'");

druidds.settestwhileidle(true);

druidds.settestonborrow(true);

// 初始化

druidds.init();

filters:屬性型別是字串,通過別名的方式配置擴充套件外掛程式,常用的外掛程式有:監控統計

用的filter:stat日誌用的filter:log4j,防禦sql注入的filter:wall

initialsize:初始化時建立物理連線的個數。初始化發生在顯示呼叫init方法,或者第一

次getconnection時

maxactive:最大連線池數量

minidle:最小連線池數量

maxwait:獲取連線時最大等待時間,單位毫秒。配置了maxwait之後,預設啟用公平鎖,併發效率會有所下降,如果需要可以通過配置useunfairlock屬性為true使用非公平鎖

poolpreparedstatements: 是否快取preparedstatement,也就是pscache。pscache對支援游標的資料庫效能提公升巨大,比如說oracle。在mysql下建議關閉。

validationquery:用來檢測連線是否有效的sql,要求是乙個查詢語句,常用select 'x'。如果validationquery為null,testonborrow、testonreturn、testwhileidle都不會起作用

validationquerytimeout:單位秒,檢測連線是否有效的超時時間。底層呼叫jdbc statement物件的void setquerytimeout(int seconds)方法

testonborrow: 申請連線時執行validationquery檢測連線是否有效,做了這個配置會 降低效能。

testonreturn:歸還連線時執行validationquery檢測連線是否有效,做了這個配置會降 低效能。

testwhileidle:建議配置為true,不影響效能,並且保證安全性。指明連線是否被空閒連線**器(如果有)進行檢驗.如果檢測失敗,則連線將被從池中去除. 。

numtestsperevictionrun:不再使用,乙個druiddatasource只支援乙個evictionrun

minevictableidletimemillis:連線保持空閒而不被驅逐的最長時間

connectioninitsqls:物理連線初始化的時候執行的sql

exceptionsorter:當資料庫丟擲一些不可恢復的異常時,拋棄連線

removeabandoned:是否啟用連線洩露檢測

removeabandonedtimeout:連線洩露,連線超過指定時間未關閉,就會被強行**

logabandoned:關閉abanded連線時輸出錯誤日誌

DruidDataSource的慢SQL記錄

statfilter屬性slowsqlmillis用來配置sql慢的標準,執行時間超過slowsqlmillis的就是慢。slowsqlmillis的預設值為3000,也就是3秒。通過日誌輸出執行慢的sql 這裡為了測試結果,超時時間設定為5ms slowsqlmillis屬性也可以通過connec...

DruidDataSource的使用 配置

記錄一下使用druiddatasource的常用配置。1.pom.xml中引入 com.alibaba druid 1.0.18 2.中配置 configuration public class mysqlconfig private string username value private st...

DruidDataSource配置屬性列表

druiddatasource配置相容dbcp,但個別配置的語意有所區別。配置預設值 說明name 配置這個屬性的意義在於,如果存在多個資料來源,監控的時候可以通過名字來區分開來。如果沒有配置,將會生成乙個名字,格式是 datasource system.identityhashcode this ...