轉!!DBCP2 配置詳解說明


轉自:https://www.cnblogs.com/diyunpeng/p/6980098.html

 

 

由於commons-dbcp所用的連接池出現版本升級,因此commons-dbcp2中的數據庫池連接配置也發生了變化,具體的參數配置說明如下:

參數                             描述
username
(用戶名)
通過JDBC建立一個連接所需的用戶名
password
(密碼)
通過JDBC建立一個連接所需的密碼
url
(JDBC連接串)
通過JDBC建立一個連接所需的URL
driverClassName
(JDBC驅動程序)
所使用的JDBC驅動的類全名
connectionProperties
(連接屬性)
連接參數是在建立一個新連接時發送給JDBC驅動的
字符串的格式必須是[參數名=參數值;]
提示:用戶名和密碼屬性是需要明確指出的,所以這兩個參數不需要包含在這里

參數                                       缺省值           描述
defaultAutoCommit
(自動提交)
JDBC驅動的缺省值 通過這個池創建連接的默認自動提交狀態。如果不設置,則setAutoCommit 方法將不被調用。
defaultReadOnly
(只讀設置)
JDBC驅動的缺省值 通過這個池創建連接的默認只讀狀態。如果不設置,則setReadOnly  方法將不被調用。(部分驅動不支持只讀模式,如:Informix)
defaultTransactionIsolation
(事務隔離級別)
JDBC驅動的缺省值 通過這個池創建連接的默認事務隔離策略,設置值為下列中的某一個: (參考 javadoc)(看筆記中另外一篇事務屬性小結)
  • NONE
  • READ_COMMITTED
  • READ_UNCOMMITTED
  • REPEATABLE_READ
  • SERIALIZABLE
defaultCatalog
(目錄,類似於與模式名,但比模式名更加抽象,Oracle、MySQL不支持,其他,MS SQL Server = 數據庫名)
  通過這個池創建連接的默認缺省的catalog 
cacheState
(緩存狀態)
true 如果設置為true,池化的連接將在第一次讀或寫,以及隨后的寫的時候緩存當前的只讀狀態和自動提交設置。這樣就省去了對getter的任何進一步的調用時對數據庫的額外查詢。如果直接訪問底層連接,只讀狀態和/或自動提交設置改變緩存值將不會被反映到當前的狀態,在這種情況下,應該將該屬性設置為false以禁用緩存。
defaultQueryTimeout
(查詢超時時間)
null 如果值不為null,指定一個整數值,用於在創建Statement時,指定為查詢超時時間。如果設置為null,則使用驅動程序默認設置。
enableAutocommitOnReturn
(連接歸還到池時,設置為自動提交)
true 如果設置為true,則連接被歸還到連接池時,會指定設置為autoCommit = true
rollbackOnReturn
(連接歸還到池時,回滾所有操作)
true 如果設置為true,則連接被歸還到連接池時,會自動執行一次rollback();前提是自動提交 = true and 非只讀。

參數                         缺省值                 描述
initialSize
(初始連接數)
0 當這個池被啟動時初始化的創建的連接個數,起始生效版本:1.2
maxTotal
(最大活動連接數)
8 可以在這個池中同一時刻被分配的有效連接數的最大值,如設置為負數,則不限制
maxIdle
(最大空閑連接數)
8 在池中,可以保持空閑狀態的最大連接數,超出設置值之外的空閑連接在歸還到連接池時將被釋放,如設置為負數,則不限制
minIdle
(最小空閑連接數)
0 可以在池中保持空閑的最小連接數,低於設置值時,空閑連接將被創建,以努力保持最小空閑連接數>=minIdle,如設置為0,則不創建
這里設置的數值生效的前提是:timeBetweenEvictionRunsMillis(空閑對象驅逐線程運行時的休眠毫秒數)被設置為正數。
maxWaitMillis
(從連接池獲取一個連接時,最大的等待時間)
indefinitely
(不確定)
設置為-1時,如果沒有可用連接,連接池會一直無限期等待,直到獲取到連接為止。
如果設置為N(毫秒),則連接池會等待N毫秒,等待不到,則拋出異常。

 提示: 如果在高負載的系統中將maxIdle的值設置的很低,則你可能會發現在一個新的連接剛剛被創建的時候就立即被關閉了。這是活躍的線程及時關閉連接要比那些打開連接的線程要快,導致空閑的連接數大於maxIdle。高負載系統中maxIdle的最合適的配置值是多樣的,但是缺省值是一個好的開始點。


參數                                               缺省值          描述
validationQuery
(確認查詢SQL)





validationQueryTimeout
(確認查詢SQL的超時時間)
 





no timeout
在連接池返回連接給調用者前用來進行連接校驗的查詢sql。如果指定,則這個查詢必須是一個至少返回一行數據的SQL SELECT語句。如果沒有指定,則連接將通過調用isValid() 方法進行校驗。



確認連接有效SQL的執行查詢超時時間(秒)。如果設置為正數,那么會傳遞給JDBC驅動的setQueryTimeOut()方法,這個設置對執行【確認有效查詢SQL】起作用。
testOnCreate
(連接創建后,馬上驗證有效性)
false 指明對象在創建后是否需要驗證是否有效,如果對象驗證失敗,則觸發對象創建的租借嘗試將失敗。
testOnBorrow
(從連接池獲取一個連接時,驗證有效性)
true 指明在從池中租借對象時是否要進行驗證有效,如果對象驗證失敗,則對象將從池子釋放,然后我們將嘗試租借另一個
testOnReturn
(連接被歸還到連接池時,驗證有效性)
false 指明在將對象歸還給連接池前是否需要校驗。
testWhileIdle
(連接空閑時,驗證有效性)
false 指明對象是否需要通過對象驅逐者進行校驗(如果有的話),假如一個對象驗證失敗,則對象將被從池中釋放。
timeBetweenEvictionRunsMillis
(空閑對象驅逐線程運行時的休眠毫秒數)
-1 空閑對象驅逐線程運行時的休眠毫秒數,如果設置為非正數,則不運行空閑對象驅逐線程。
numTestsPerEvictionRun
(在每個空閑對象驅逐線程運行過程中中進行檢查的對象個數)
3 在每個空閑對象驅逐線程運行過程中中進行檢查的對象個數。(如果有的話)
minEvictableIdleTimeMillis
(空閑的連接最低要待N毫秒后,才會被釋放)
1000 * 60 * 30
(30分)
符合對象驅逐條件的對象在池中最小空閑毫秒總數(如果有的話)
softMiniEvictableIdleTimeMillis
(空閑的連接最低要待N毫秒后,才會被釋放,但有額外條件)
-1 符合對象驅逐條件的對象在池中最小空閑毫秒總數,額外的條件是池中至少保留有minIdle所指定的個數的連接。當miniEvictableIdleTimeMillis 被設置為一個正數,空閑連接驅逐者首先檢測miniEvictableIdleTimeMillis,當空閑連接被驅逐者訪問時,首先與miniEvictableIdleTimeMillis 所指定的值進行比較(而不考慮當前池中的空閑連接數),然后比較softMinEvictableIdleTimeMillis所指定的連接數,包括minIdle條件。
maxConnLifetimeMillis
(一個連接的最大存活毫秒數)
-1 一個連接的最大存活毫秒數。如果超過這個時間,則連接在下次激活、鈍化、校驗時都將會失敗。如果設置為0或小於0的值,則連接的存活時間是無限的。
connectionInitSqls
(連接被第一次創建時,執行的初始化SQL)
null 在第一次創建時用來初始化物理連接的SQL語句集合。這些語句只在配置的連接工廠創建連接時被執行一次。
lifo
(后進先出)
true 設置為true表明連接池(如果池中有可用的空閑連接時)將返回最后一次使用的租借對象(最后進入)。
設置為false則表明池將表現為FIFO隊列(先進先出)—將會按照它們被歸還的順序從空閑連接實例池中獲取連接
logExpiredConnections
(一個過期的連接被連接池關閉時,寫日志標識)
true 如果連接存貨時間超過maxConnLifetimeMillis,連接將被連接池會抽,此時默認輸出日志。如果設置為false,這不會寫日志。


參數                                             缺省值                 描述
poolPreparedStatements
(設置該連接池的預處理語句池是否生效)
false 設置該連接池的預處理語句池是否生效
maxOpenPreparedStatements
(可以在語句池中同時分配的最大語句數)
unlimited 可以在語句池中同時分配的最大語句數。設置為負數則不限制。

 這個設置同時作用於預處理語句池. 當一個可用的語句池被創建給每一個連接時,通過以下方法創建的預處理語句將被池化。

  • public PreparedStatement prepareStatement(String sql)
  • public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)

 提示 -要確保你的連接會留下一些資源給其他語句。池化預處理語句可能會在數據庫中保持他們的游標,可能會引起連接的游標越界,尤其是maxOpenPreparedStatements的值被設置為默認值(無限的),而且一個應用程序可能會為每個連接打開大量不同的預處理語句。為了避免這個問題maxOpenPreparedStatements應該被設置為一個小於連接可以打開的最大游標數的值。


參數                                                         缺省值     描述
accessToUnderlyingConnectionAllowed
(控制PoolGuard是否可以訪問底層連接 )
false 控制PoolGuard是否可以訪問底層連接 

如果允許訪問的話,使用如下代碼結構:

    Connection conn = ds.getConnection();
    Connection dconn =((DelegatingConnection) conn).getInnermostDelegate();
    ...
    conn.close()

 默認值為false,這是一個有着潛在風險的操作,使用不當可能會導致非常嚴重的后果。(在守護連接已被關閉的情況下,關閉底層連接或者繼續使用它),只有在你需要直接訪問驅動的特有擴展是可以謹慎使用。

 NOTE: 除了最原始那個之外,不要關閉底層連接


參數                                       缺省值         描述

removeAbandonedOnMaintenance
removeAbandonedOnBorrow
()
false 標記是否刪除超過removeAbandonedTimout所指定時間的被遺棄的連接。
如果設置為true,則一個連接在超過removeAbandonedTimeout所設定的時間未使用即被認為是應該被拋棄並應該被移除的。
創建一個語句,預處理語句,可調用語句或使用它們其中的一個執行查詢(使用執行方法中的某一個)會重新設置其父連接的lastUsed 屬性。
在寫操作較少的應用程序中將該參數設置為true可以將數據庫連接從連接關閉失敗中恢復。
removeAbandonedTimeout
(一個被拋棄連接可以被移除的超時時間)
300(秒) 一個被拋棄連接可以被移除的超時時間,單位為秒
logAbandoned false 標志是否為應用程序中遺棄語句或連接的代碼開啟日志堆棧追蹤。
因為一個堆棧跟蹤已被創建,被拋棄的語句和連接相關的日志將被覆蓋到打開每個連接或者創建一個Statement時

如果你啟用了removeAbandoned,則一個連接被池回收再利用是可能的,因為它被認為是已遺棄 在(getNumIdle() < 2) and (getNumActive() > getMaxTotal() - 3)成立時,這個機制將被觸發。

 例如, maxTotal=20 ,這里有18個活躍連接,一個限制連接,將觸發 "removeAbandoned"。但是只有在活動連接超過 "removeAbandonedTimeout" 所指定的秒數內未使用才會被刪除(默認為300秒)。遍歷一個結果集並不被統計為被使用,創建一個語句,預處理語句,可調用語句或使用它們其中的一個執行查詢(使用執行方法中的某一個)會重新設置其父連接的lastUsed 屬性。

 

Parameter Default Description
fastFailValidation
(驗證快速失敗)
false 如果發生致命的異常,驗證語句會快速失敗。而不會再執行isValid(),也不再去執行驗證查詢語句。致命的異常碼(SQL_STATE)指以下:
  • 57P01 (ADMIN SHUTDOWN)
  • 57P02 (CRASH SHUTDOWN)
  • 57P03 (CANNOT CONNECT NOW)
  • 01002 (SQL92 disconnect error)
  • JZ0C0 (Sybase disconnect error)
  • JZ0C1 (Sybase disconnect error)
  • Any SQL_STATE code that starts with "08"
想覆蓋異常碼,請參看 disconnectionSqlCodes 
disconnectionSqlCodes
(異常碼)
null 以逗號分割的SQL_STATE碼,fastFailValidation 為true時,才會生效。
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM