DBCP連接池配置參數(shù)說明

<!-- 數(shù)據(jù)源1 -->  
    <bean id="dataSource"  
          class="org.apache.commons.dbcp.BasicDataSource"  
          destroy-method="close">  
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>  
        <property name="url" value="jdbc:mysql://192.168.0.109:3306/test?useUnicode=true&characterEncoding=UTF-8"/>  
        <property name="username" value="root"/>  
        <property name="password" value="root"/>  
        <!--maxActive: 最大連接數(shù)量-->    
        <property name="maxActive" value="150"/>  
        <!--minIdle: 最小空閑連接-->    
        <property name="minIdle" value="5"/>  
        <!--maxIdle: 最大空閑連接-->    
        <property name="maxIdle" value="20"/>  
        <!--initialSize: 初始化連接-->    
        <property name="initialSize" value="30"/>  
        <!-- 連接被泄露時是否打印 -->  
        <property name="logAbandoned" value="true"/>  
        <!--removeAbandoned: 是否自動回收超時連接-->    
        <property name="removeAbandoned"  value="true"/>  
        <!--removeAbandonedTimeout: 超時時間(以秒數(shù)為單位)-->    
        <property name="removeAbandonedTimeout" value="10"/>  
        <!--maxWait: 超時等待時間以毫秒為單位 1000等于60秒-->  
        <property name="maxWait" value="1000"/>  
        <!-- 在空閑連接回收器線程運行期間休眠的時間值,以毫秒為單位. -->  
        <property name="timeBetweenEvictionRunsMillis" value="10000"/>  
        <!--  在每次空閑連接回收器線程(如果有)運行時檢查的連接數(shù)量 -->  
        <property name="numTestsPerEvictionRun" value="10"/>  
        <!-- 1000 * 60 * 30  連接在池中保持空閑而不被空閑連接回收器線程-->  
        <property name="minEvictableIdleTimeMillis" value="10000"/>  
    <property name="validationQuery" value="SELECT NOW() FROM DUAL"/>  
    </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"/>

當(dāng)中的

logAbandoned="true"  removeAbandoned="true" removeAbandonedTimeout="60"

就是用來配置數(shù)據(jù)庫斷開后自動連接的。

數(shù)據(jù)庫連接池會在啟動時就建立所需的若干連接,并一直保持連接狀態(tài),
但是當(dāng)數(shù)據(jù)庫服務(wù)停止后,這些連接就被外部因素給中斷了
網(wǎng)上優(yōu)化了的配置信息:

<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: 最大連接數(shù)量-->  
<property name="maxActive" value="15"/>  
<!--removeAbandoned: 是否自動回收超時連接-->  
<property name="removeAbandoned" value="true"/>  
<!--removeAbandonedTimeout: 超時時間(以秒數(shù)為單位)-->  
<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>  

參數(shù) 描述
username 傳遞給JDBC驅(qū)動的用于建立連接的用戶名
password 傳遞給JDBC驅(qū)動的用于建立連接的密碼
url 傳遞給JDBC驅(qū)動的用于建立連接的URL
driverClassName 使用的JDBC驅(qū)動的完整有效的java 類名
connectionProperties 當(dāng)建立新連接時被發(fā)送給JDBC驅(qū)動的連接參數(shù),
格式必須是 [propertyName=property;]*
注意 :參數(shù)user/password將被明確傳遞,所以不需要包括在這里。

參數(shù) 默認(rèn)值 描述
defaultAutoCommit true 連接池創(chuàng)建的連接的默認(rèn)的auto-commit狀態(tài)
defaultReadOnly driver default 連接池創(chuàng)建的連接的默認(rèn)的read-only狀態(tài).
如果沒有設(shè)置則setReadOnly方法將不會被調(diào)用. (某些驅(qū)動不支持只讀模式,比如:Informix)
defaultTransactionIsolation driver default 連接池創(chuàng)建的連接的默認(rèn)的TransactionIsolation狀態(tài).
下面列表當(dāng)中的某一個: (參考javadoc)

* NONE
* READ_COMMITTED
* READ_UNCOMMITTED
* REPEATABLE_READ
* SERIALIZABLE

defaultCatalog 連接池創(chuàng)建的連接的默認(rèn)的catalog

參數(shù) 默認(rèn)值 描述
initialSize 0 初始化連接:連接池啟動時創(chuàng)建的初始化連接數(shù)量,1.2版本后支持
maxActive 8 最大活動連接:連接池在同一時間能夠分配的最大活動連接的數(shù)量,
如果設(shè)置為非正數(shù)則表示不限制
maxIdle 8 最大空閑連接:連接池中容許保持空閑狀態(tài)的最大連接數(shù)量,超過的空閑連接將被釋放,
如果設(shè)置為負(fù)數(shù)表示不限制
minIdle 0 最小空閑連接:連接池中容許保持空閑狀態(tài)的最小連接數(shù)量,低于這個數(shù)量將創(chuàng)建新的連接,
如果設(shè)置為0則不創(chuàng)建
maxWait 無限 最大等待時間:當(dāng)沒有可用連接時,連接池等待連接被歸還的最大時間(以毫秒計數(shù)),
超過時間則拋出異常,如果設(shè)置為-1表示無限等待

參數(shù) 默認(rèn)值 描述
validationQuery SQL查詢,用來驗證從連接池取出的連接,在將連接返回給調(diào)用者之前.如果指定,
則查詢必須是一個SQL SELECT并且必須返回至少一行記錄
testOnBorrow true 指明是否在從池中取出連接前進(jìn)行檢驗,如果檢驗失敗,
則從池中去除連接并嘗試取出另一個.
注意: 設(shè)置為true后如果要生效,validationQuery參數(shù)必須設(shè)置為非空字符串
testOnReturn false 指明是否在歸還到池中前進(jìn)行檢驗
注意: 設(shè)置為true后如果要生效,validationQuery參數(shù)必須設(shè)置為非空字符串
testWhileIdle false 指明連接是否被空閑連接回收器(如果有)進(jìn)行檢驗.如果檢測失敗,
則連接將被從池中去除.
注意: 設(shè)置為true后如果要生效,validationQuery參數(shù)必須設(shè)置為非空字符串
timeBetweenEvictionRunsMillis -1 在空閑連接回收器線程運行期間休眠的時間值,以毫秒為單位.
如果設(shè)置為非正數(shù),則不運行空閑連接回收器線程
numTestsPerEvictionRun 3 在每次空閑連接回收器線程(如果有)運行時檢查的連接數(shù)量
minEvictableIdleTimeMillis 1000 * 60 * 30 連接在池中保持空閑而不被空閑連接回收器線程
(如果有)回收的最小時間值,單位毫秒

參數(shù) 默認(rèn)值 描述
poolPreparedStatements false 開啟池的prepared statement 池功能
maxOpenPreparedStatements 不限制 statement池能夠同時分配的打開的statements的最大數(shù)量,
如果設(shè)置為0表示不限制

這里可以開啟PreparedStatements池. 當(dāng)開啟時, 將為每個連接創(chuàng)建一個statement池,
并且被下面方法創(chuàng)建的PreparedStatements將被緩存起來:

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

注意: 確認(rèn)連接還有剩余資源可以留給其他statement
參數(shù) 默認(rèn)值 描述
accessToUnderlyingConnectionAllowed false 控制PoolGuard是否容許獲取底層連接

如果容許則可以使用下面的方式來獲取底層連接:

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

默認(rèn)false不開啟, 這是一個有潛在危險的功能, 不適當(dāng)?shù)木幋a會造成傷害.
(關(guān)閉底層連接或者在守護(hù)連接已經(jīng)關(guān)閉的情況下繼續(xù)使用它).請謹(jǐn)慎使用,
并且僅當(dāng)需要直接訪問驅(qū)動的特定功能時使用.
注意: 不要關(guān)閉底層連接, 只能關(guān)閉前面的那個.
參數(shù) 默認(rèn)值 描述
removeAbandoned false 標(biāo)記是否刪除泄露的連接,如果他們超過了removeAbandonedTimout的限制.
如果設(shè)置為true, 連接被認(rèn)為是被泄露并且可以被刪除,如果空閑時間超過removeAbandonedTimeout.
設(shè)置為true可以為寫法糟糕的沒有關(guān)閉連接的程序修復(fù)數(shù)據(jù)庫連接.
removeAbandonedTimeout 300 泄露的連接可以被刪除的超時值, 單位秒
logAbandoned false 標(biāo)記當(dāng)Statement或連接被泄露時是否打印程序的stack traces日志。
被泄露的Statements和連接的日志添加在每個連接打開或者生成新的Statement,
因為需要生成stack trace。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,692評論 19 139
  • 最原始的數(shù)據(jù)庫連接就是我們打開一個連接,使用過后再關(guān)閉該鏈接來釋放資源。頻繁的新建打開再關(guān)閉連接對jvm和數(shù)據(jù)庫都...
    野柳閱讀 6,592評論 1 11
  • application的配置屬性。 這些屬性是否生效取決于對應(yīng)的組件是否聲明為Spring應(yīng)用程序上下文里的Bea...
    新簽名閱讀 5,544評論 1 27
  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 6,280評論 0 4
  • 閨蜜的定義按道理來講就是無話不說天天黏膩在一起的朋友,可是我逐漸發(fā)現(xiàn),那些就算多日不聯(lián)系,偶爾見面也不會尷尬,感情...
    濃濃冬淺淺夏閱讀 645評論 0 2

友情鏈接更多精彩內(nèi)容