1. 程式人生 > >JDBC資料庫連線池配置

JDBC資料庫連線池配置

dbcp配置中文版本,翻譯自apache 官方文件,原文請見http://commons.apache.org/dbcp/configuration.html

引數 描述
username 傳遞給JDBC驅動的用於建立連線的使用者名稱
password 傳遞給JDBC驅動的用於建立連線的密碼
url 傳遞給JDBC驅動的用於建立連線的URL
driverClassName 使用的JDBC驅動的完整有效的java 類名
connectionProperties 當建立新連線時被髮送給JDBC驅動的連線引數,格式必須是 [propertyName=property;]*
注意:引數user/password將被明確傳遞,所以不需要包括在這裡。



引數 預設值 描述
defaultAutoCommit true 連線池建立的連線的預設的auto-commit狀態
defaultReadOnly driver default 連線池建立的連線的預設的read-only狀態. 如果沒有設定則setReadOnly方法將不會被呼叫. (某些驅動不支援只讀模式,比如:Informix)  
defaultTransactionIsolation driver default 連線池建立的連線的預設的TransactionIsolation狀態. 下面列表當中的某一個: (參考javadoc)
NONE
READ_COMMITTED
READ_UNCOMMITTED
REPEATABLE_READ
SERIALIZABLE

defaultCatalog
連線池建立的連線的預設的catalog



引數 預設值 描述
initialSize 0 初始化連線:連線池啟動時建立的初始化連線數量,1.2版本後支援  
maxActive 8 最大活動連線:連線池在同一時間能夠分配的最大活動連線的數量, 如果設定為非正數則表示不限制  
maxIdle 8 最大空閒連線:連線池中容許保持空閒狀態的最大連線數量,超過的空閒連線將被釋放,如果設定為負數表示不限制  
minIdle 0 最小空閒連線:連線池中容許保持空閒狀態的最小連線數量,低於這個數量將建立新的連線,如果設定為0則不建立  
maxWait 無限 最大等待時間:當沒有可用連線時,連線池等待連線被歸還的最大時間(以毫秒計數),超過時間則丟擲異常,如果設定為-1表示無限等待



引數 預設值 描述
validationQuery
SQL查詢,用來驗證從連線池取出的連線,在將連線返回給呼叫者之前.如果指定,則查詢必須是一個SQL SELECT並且必須返回至少一行記錄  
testOnBorrow true 指明是否在從池中取出連線前進行檢驗,如果檢驗失敗,則從池中去除連線並嘗試取出另一個.
注意: 設定為true後如果要生效,validationQuery引數必須設定為非空字串  
testOnReturn false 指明是否在歸還到池中前進行檢驗
注意: 設定為true後如果要生效,validationQuery引數必須設定為非空字串  
testWhileIdle false 指明連線是否被空閒連接回收器(如果有)進行檢驗.如果檢測失敗,則連線將被從池中去除.
注意: 設定為true後如果要生效,validationQuery引數必須設定為非空字串  
timeBetweenEvictionRunsMillis -1 在空閒連接回收器執行緒執行期間休眠的時間值,以毫秒為單位. 如果設定為非正數,則不執行空閒連接回收器執行緒  
numTestsPerEvictionRun 3 在每次空閒連接回收器執行緒(如果有)執行時檢查的連線數量  
minEvictableIdleTimeMillis 1000 * 60 * 30 連線在池中保持空閒而不被空閒連接回收器執行緒(如果有)回收的最小時間值,單位毫秒




引數 預設值 描述
poolPreparedStatements false 開啟池的prepared statement 池功能
maxOpenPreparedStatements 不限制 statement池能夠同時分配的開啟的statements的最大數量, 如果設定為0表示不限制

這裡可以開啟PreparedStatements池. 當開啟時, 將為每個連線建立一個statement池,並且被下面方法建立的PreparedStatements將被快取起來:
    * public PreparedStatement prepareStatement(String sql)
    * public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
注意: 確認連線還有剩餘資源可以留給其他statement


引數 預設值 描述
accessToUnderlyingConnectionAllowed false 控制PoolGuard是否容許獲取底層連線

如果容許則可以使用下面的方式來獲取底層連線:
    Connection conn = ds.getConnection();
    Connection dconn = ((DelegatingConnection) conn).getInnermostDelegate();
    ...
    conn.close();

預設false不開啟, 這是一個有潛在危險的功能, 不適當的編碼會造成傷害.(關閉底層連線或者在守護連線已經關閉的情況下繼續使用它).請謹慎使用,並且僅當需要直接訪問驅動的特定功能時使用.
注意: 不要關閉底層連線, 只能關閉前面的那個.


引數 預設值 描述
removeAbandoned false 標記是否刪除洩露的連線,如果他們超過了removeAbandonedTimout的限制.如果設定為true, 連線被認為是被洩露並且可以被刪除,如果空閒時間超過removeAbandonedTimeout. 設定為true可以為寫法糟糕的沒有關閉連線的程式修復資料庫連線.  
removeAbandonedTimeout 300 洩露的連線可以被刪除的超時值, 單位秒
logAbandoned false 標記當Statement或連線被洩露時是否列印程式的stack traces日誌。被洩露的Statements和連線的日誌新增在每個連線開啟或者生成新的Statement,因為需要生成stack trace。

如果開啟"removeAbandoned",那麼連線在被認為洩露時可能被池回收. 這個機制在(getNumIdle() < 2) and (getNumActive() > getMaxActive() - 3)時被觸發.
舉例當maxActive=20, 活動連線為18,空閒連線為1時可以觸發"removeAbandoned".但是活動連線只有在沒有被使用的時間超過"removeAbandonedTimeout"時才被刪除,預設300秒.在resultset中游歷不被計算為被使用