Java 學習筆記14:Spring 資料庫資料來源DBCP配置說明
阿新 • • 發佈:2019-02-05
連線資料庫都必須要有資料連線,一般Spring中採用DBCP配置源,通過在bean.xml中配置相應的資料配置,就可以連線資料庫了,可以看一下以下相關配置:
<bean id="jdbc" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" > <property name="locations" value="/WEB-INF/jdbc.properties"/> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="testOnBorrow" value="false" /> <property name="testWhileIdle" value="true" /> <!-- 連線池啟動時的初始值 --> <property name="initialSize" value="10" /> <!-- 連線池的最大值 --> <property name="maxActive" value="100" /> <!-- 最大空閒值.當經過一個高峰時間後,連線池可以慢慢將已經用不到的連線慢慢釋放一部分,一直減少到maxIdle為止 --> <property name="maxIdle" value="50" /> <!-- 最小空閒值.當空閒的連線數少於閥值時,連線池就會預申請去一些連線,以免洪峰來時來不及申請 --> <property name="minIdle" value="10" /> <!--#給出一條簡單的sql語句進行驗證--> <property name="validationQuery" value="select getdate()" /> <!--#在取出連線時進行有效驗證--> <property name="removeAbandonedTimeout" value="120" /> <property name="removeAbandoned" value="true" /> <!-- #執行判斷連線超時任務的時間間隔,單位為毫秒,預設為-1,即不執行任務。 --> <property name="timeBetweenEvictionRunsMillis" value="3600000" /> <!-- #連線的超時時間,預設為半小時。 --> <property name="minEvictableIdleTimeMillis" value="3600000" /> </bean> <bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean>
以上的配置,就直接可以使用JdbcTemplate來做資料庫操作了。
下面是一個詳細的配置表:
常用連結配置:
引數 | 描述 |
---|---|
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)
|
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表示不限制 |
連線洩露回收:
引數 | 預設值 | 描述 |
---|---|---|
removeAbandoned | false | 標記是否刪除洩露的連線,如果他們超過了removeAbandonedTimout的限制.如果設定為true, 連線被認為是被洩露並且可以被刪除,如果空閒時間超過removeAbandonedTimeout. 設定為true可以為寫法糟糕的沒有關閉連線的程式修復資料庫連線. |
removeAbandonedTimeout | 300 | 洩露的連線可以被刪除的超時值, 單位秒 |
logAbandoned | false | 標記當Statement或連線被洩露時是否列印程式的stack traces日誌。被洩露的Statements和連線的日誌新增在每個連線開啟或者生成新的Statement,因為需要生成stack trace。 |
注意:
- Java資料庫連線有“8小時問題”,所以destroy-method="close"一定要加上。“8小時問題”是指一個連線空閒8小時資料庫會自動關閉,而資料來源並不知道。
- 高併發下,可以testOnBorrow設定false,testWhileIdle設定為true,這樣就會定時對後臺空連結進行檢測發現無用連線就會清除掉,不會每次都去都去檢測是否8小時的空連結。