參數 | 默認值 | 說明 |
username | \ | 傳遞給JDBC驅動的用於建立連接的用戶名 |
password | \ | 傳遞給JDBC驅動的用於建立連接的密碼 |
url | \ | 傳遞給JDBC驅動的用於建立連接的URL |
driverClassName | \ | 使用的JDBC驅動的完整有效的Java 類名 |
initialSize | 0 | 初始化連接:連接池啟動時創建的初始化連接數量,1.2版本后支持 |
maxActive | 8 | 最大活動連接:連接池在同一時間能夠分配的最大活動連接的數量, 如果設置為非正數則表示不限制 |
maxIdle | 8 | 最大空閑連接:連接池中容許保持空閑狀態的最大連接數量,超過的空閑連接將被釋放, 如果設置為負數表示不限制 |
minIdle | 0 | 最小空閑連接:連接池中容許保持空閑狀態的最小連接數量,低於這個數量將創建新的連接, 如果設置為0則不創建 |
maxWait | 無限 | 最大等待時間:當沒有可用連接時,連接池等待連接被歸還的最大時間(以毫秒計數)超過時間則拋出異常,如果設置為-1表示無限等待 |
testOnReturn | false | 是否在歸還到池中前進行檢驗 |
testWhileIdle | false | 連接是否被空閑連接回收器(如果有)進行檢驗.如果檢測失敗, 則連接將被從池中去除.設置為true后如果要生效,validationQuery參數必須設置為非空字符串 |
minEvictableIdleTimeMillis | 1000 * 60 * 30 | 連接在池中保持空閑而不被空閑連接回收器線程 (如果有)回收的最小時間值,單位毫秒 |
numTestsPerEvictionRun | 3 | 在每次空閑連接回收器線程(如果有)運行時檢查的連接數量 |
timeBetweenEvictionRunsMillis | -1 | 在空閑連接回收器線程運行期間休眠的時間值,以毫秒為單位. 如果設置為非正數,則不運行空閑連接回收器線程 |
validationQuery | null | SQL查詢,用來驗證從連接池取出的連接,在將連接返回給調用者之前.如果指定, 則查詢必須是一個SQL SELECT並且必須返回至少一行記錄 |
testOnBorrow | true | 是否在從池中取出連接前進行檢驗,如果檢驗失敗, |
DBCP連接池的自我檢測
默認配置的連接池,是不對池中的鏈接做測試的,有時已經斷開,但連接池不知道,這樣從池里取出來的這樣的連接訪問數據庫就會報錯。
解決方案:1.定時對連接做測試,測試失敗就關閉連接。
2.控制鏈接的空閑時間達到N分鍾,就關閉連接(然后可再新建連接)
3.也可以混合使用兩個方案:
。validationQuery(測試連接的sql語句) : validationQuery= "SELECT 1"
。testWhileIdle (連接是否被空閑連接回收器(如果有)進行檢驗.如果檢測失敗,則連接將被從池中去除) : testWhileIdle = "true"
。testOnBorrow = "false" 借出連接時不要測試,否則很影響性能,性能會下降7-10倍
。timeBetweenEvictionRunsMillis (每30秒運行一次空閑連接回收器(獨立線程)。並每次檢查3個連接,
如果連接空閑時間超過30分鍾就銷毀。銷毀連接后,連接數量就少了,如果小於minIdle數量,就新建連接,維護數量不少於minIdle)
timeBetweenEvictionRunsMillis = "30000"
。minEvictableIdleTimeMillis(池中的連接空閑x毫秒后被回收,默認30分鍾):minEvictableIdleTimeMillis = "1800000"
。numTestsPerEvictionRun(在每次空閑連接回收器線程(如果有)運行時檢查的連接數量,默認值就是3.) : numTestsPerEvictionRun ="3"