轉!!DBCP2 配置詳解說明

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

 

 

因爲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的最合適的配置值是多樣的,可是缺省值是一個好的開始點。java


參數                                               缺省值          描述
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 能夠在語句池中同時分配的最大語句數。設置爲負數則不限制。

 這個設置同時做用於預處理語句池. 當一個可用的語句池被建立給每個鏈接時,經過如下方法建立的預處理語句將被池化。mysql

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

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


參數                                                         缺省值     描述
accessToUnderlyingConnectionAllowed
(控制PoolGuard是否能夠訪問底層鏈接 )
false 控制PoolGuard是否能夠訪問底層鏈接 

若是容許訪問的話,使用以下代碼結構:數據庫

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

 默認值爲false,這是一個有着潛在風險的操做,使用不當可能會致使很是嚴重的後果。(在守護鏈接已被關閉的狀況下,關閉底層鏈接或者繼續使用它),只有在你須要直接訪問驅動的特有擴展是能夠謹慎使用。api

 NOTE: 除了最原始那個以外,不要關閉底層鏈接緩存


參數                                       缺省值         描述

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

若是你啓用了removeAbandoned,則一個鏈接被池回收再利用是可能的,由於它被認爲是已遺棄 在(getNumIdle() < 2) and (getNumActive() > getMaxTotal() - 3)成立時,這個機制將被觸發。url

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

 

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時,纔會生效。
相關文章
相關標籤/搜索