<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> java
<property name="driverClassName" value="${db.driverClassName}"/> sql
<property name="url" value="${db.url}"/> 數據庫
<property name="username" value="${db.username}"/> apache
<property name="password" value="${db.password}"/> 緩存
<!--initialSize: 初始化鏈接--> 編碼
<property name="initialSize" value="5"/> url
<!--maxIdle: 最大空閒鏈接--> 線程
<property name="maxIdle" value="10"/> 日誌
<!--minIdle: 最小空閒鏈接--> orm
<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>
參數 描述
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秒.