1. 程式人生 > >DBCP連接池配置參數說明

DBCP連接池配置參數說明

open move 但是 pac o-c mysq ict dsta highlight

  (轉)

  1. <!-- 數據源1 -->
  2. <bean id="dataSource"
  3. class="org.apache.commons.dbcp.BasicDataSource"
  4. destroy-method="close">
  5. <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  6. <property name="url" value="jdbc:mysql://192.168.0.109:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
  7. <property name="username" value="root"/>
  8. <property name="password" value="root"/>
  9. <!--maxActive: 最大連接數量-->
  10. <property name="maxActive" value="150"/>
  11. <!--minIdle: 最小空閑連接-->
  12. <property name="minIdle" value="5"/>
  13. <!--maxIdle: 最大空閑連接-->
  14. <property name="maxIdle" value="20"/>
  15. <!--initialSize: 初始化連接-->
  16. <property name="initialSize" value="30"/>
  17. <!-- 連接被泄露時是否打印 -->
  18. <property name="logAbandoned" value="true"/>
  19. <!--removeAbandoned: 是否自動回收超時連接-->
  20. <property name="removeAbandoned" value="true"/>
  21. <!--removeAbandonedTimeout: 超時時間(以秒數為單位)-->
  22. <property name="removeAbandonedTimeout" value="10"/>
  23. <!--maxWait: 超時等待時間以毫秒為單位 1000等於60秒-->
  24. <property name="maxWait" value="1000"/>
  25. <!-- 在空閑連接回收器線程運行期間休眠的時間值,以毫秒為單位. -->
  26. <property name="timeBetweenEvictionRunsMillis" value="10000"/>
  27. <!-- 在每次空閑連接回收器線程(如果有)運行時檢查的連接數量 -->
  28. <property name="numTestsPerEvictionRun" value="10"/>
  29. <!-- 1000 * 60 * 30 連接在池中保持空閑而不被空閑連接回收器線程-->
  30. <property name="minEvictableIdleTimeMillis" value="10000"/>
  31. <property name="validationQuery" value="SELECT NOW() FROM DUAL"/>
  32. </bean>

下面的註釋為轉來的。很詳細

tomcatde DHCP的配置
<Resource driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
logAbandoned="true" maxActive="20" maxIdle="2" maxWait="5000" name="system"
removeAbandonedTimeout="60" removeAbandoned="true"
password="xx" type="javax.sql.DataSource"
url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=base"
username="sa"/>
當中的
logAbandoned="true" removeAbandoned="true" removeAbandonedTimeout="60"
就是用來配置數據庫斷開後自動連接的。


數據庫連接池會在啟動時就建立所需的若幹連接,並一直保持連接狀態,
但是當數據庫服務停止後,這些連接就被外部因素給中斷了
網上優化了的配置信息:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${db.driverClassName}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
<!--initialSize: 初始化連接-->
<property name="initialSize" value="5"/>
<!--maxIdle: 最大空閑連接-->
<property name="maxIdle" value="10"/>
<!--minIdle: 最小空閑連接-->
<property name="minIdle" value="5"/>
<!--maxActive: 最大連接數量-->
<property name="maxActive" value="15"/>
<!--removeAbandoned: 是否自動回收超時連接-->
<property name="removeAbandoned" value="true"/>
<!--removeAbandonedTimeout: 超時時間(以秒數為單位)-->
<property name="removeAbandonedTimeout" value="180"/>
<!--maxWait: 超時等待時間以毫秒為單位 6000毫秒/1000等於60秒-->
<property name="maxWait" value="3000"/>
<property name="validationQuery">
<value>SELECT 1</value>
</property>
<property name="testOnBorrow">
<value>true</value>
</property>
</bean>

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中遊歷不被計算為被使用.

DBCP連接池配置參數說明