DruidDataSource配置相容DBCP,但個別配置的語意有所區別。 配置 預設值 說明 name 配置這個屬性的意義在於,如果存在多個數據源,監控的時候可以通過名字來區分開來。如果沒有配置,將會生成一個名字,格式是:"DataSource-" + System.identityHashCod ...
DruidDataSource配置相容DBCP,但個別配置的語意有所區別。
配置 | 預設值 | 說明 |
---|---|---|
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。詳細看這裡 | |
driverClassName | 根據url自動識別 | 這一項可配可不配,如果不配置druid會根據url自動識別dbType,然後選擇相應的driverClassName |
initialSize | 0 | 初始化時建立物理連接的個數。初始化發生在顯示調用init方法,或者第一次getConnection時 初始bean時配置init方法 |
maxActive | 8 | 最大連接池數量 (連接池中最多支持多少個活動會話) |
maxIdle | 8 | 已經不再使用,配置了也沒效果 |
minIdle | 最小連接池數量 (回收空閑連接時,將保證至少有minIdle個連接.) |
|
maxWait | 獲取連接時最大等待時間,單位毫秒。配置了maxWait之後,預設啟用公平鎖,併發效率會有所下降,如果需要可以通過配置useUnfairLock屬性為true使用非公平鎖。 (程式向連接池中請求連接時,超過maxWait的值後,認為本次請求失敗,即連接池沒有可用連接,單位毫秒,設置-1時表示無限等待) |
|
poolPreparedStatements | false | 是否緩存preparedStatement,也就是PSCache。PSCache對支持游標的資料庫性能提升巨大,比如說oracle。在mysql下建議關閉。 緩存通過以下兩個方法發起的SQL: public PreparedStatement prepareStatement(String sql) public PreparedStatement prepareStatement(String sql,int resultSetType, int resultSetConcurrency) |
maxPoolPreparedStatementPerConnectionSize | -1 | 要啟用PSCache,必須配置大於0,當大於0時,poolPreparedStatements自動觸發修改為true。在Druid中,不會存在Oracle下PSCache占用記憶體過多的問題,可以把這個數值配置大一些,比如說100 每個連接最多緩存多少個SQL |
validationQuery | 用來檢測連接是否有效的sql,要求是一個查詢語句,常用select 'x'。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會起作用。 檢查池中的連接是否仍可用的 SQL 語句,druid會連接到資料庫執行該SQL, 如果正常返回,則表示連接可用,否則表示連接不可用 |
|
validationQueryTimeout | 單位:秒,檢測連接是否有效的超時時間。底層調用jdbc Statement對象的void setQueryTimeout(int seconds)方法 | |
testOnBorrow | false | 申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。 |
testOnReturn | false | 歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。 |
testWhileIdle | true | 建議配置為true,不影響性能,並且保證安全性。申請連接的時候檢測,如果空閑時間大於timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。 |
keepAlive | false (1.0.28) | 連接池中的minIdle數量以內的連接,空閑時間超過minEvictableIdleTimeMillis,則會執行keepAlive操作。 程式沒有close連接且空閑時長超過 minEvictableIdleTimeMillis,則會執行validationQuery指定的SQL,以保證該程式連接不會池kill掉,其範圍不超過minIdle指定的連接個數。 |
timeBetweenEvictionRunsMillis | 1分鐘(1.0.14) | 有兩個含義: 1) Destroy線程會檢測連接的間隔時間,如果連接空閑時間大於等於minEvictableIdleTimeMillis則關閉物理連接。 2) testWhileIdle的判斷依據,詳細看testWhileIdle屬性的說明 檢查空閑連接的頻率,單位毫秒, 非正整數時表示不進行檢查 |
numTestsPerEvictionRun | 30分鐘(1.0.14) | 不再使用,一個DruidDataSource只支持一個EvictionRun |
minEvictableIdleTimeMillis | 連接保持空閑而不被驅逐的最小時間,單位毫秒 池中某個連接的空閑時長達到 N 毫秒後, 連接池在下次檢查空閑連接時,將回收該連接,要小於防火牆超時設置net.netfilter.nf_conntrack_tcp_timeout_established的設置 |
|
maxEvictableIdleTimeMillis | ||
connectionInitSqls | 物理連接初始化的時候執行的sql | |
exceptionSorter | 根據dbType自動識別 | 當資料庫拋出一些不可恢復的異常時,拋棄連接 |
filters | 屬性類型是字元串,通過別名的方式配置擴展插件,常用的插件有: 監控統計用的filter:stat 日誌用的filter:log4j或者 slf4j 防禦sql註入的filter:wall | |
proxyFilters | 類型是List<com.alibaba.druid.filter.Filter>,如果同時配置了filters和proxyFilters,是組合關係,並非替換關係 | |
asyncInit | 1.1.4中新增加的配置,如果有initialSize數量較多時,打開會加快應用啟動時間 |