天天看點

Java 學習筆記14:Spring 資料庫資料源DBCP配置說明

Java 學習筆記14:Spring 資料庫資料源DBCP配置說明

  <bean id="jdbc" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >  

  1.     <property name="locations" value="/WEB-INF/jdbc.properties"/>      
  2.    </bean>  
  3.    <bean id="dataSource"  class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">          
  4.     <property name="driverClassName" value="${jdbc.driverClassName}" />         
  5.     <property name="url" value="${jdbc.url}" />         
  6.     <property name="username" value="${jdbc.username}" />         
  7.     <property name="password" value="${jdbc.password}" />      
  8.      <property name="testOnBorrow" value="false" />        
  9.        <property name="testWhileIdle" value="true" />     
  10.          <!-- 連接配接池啟動時的初始值 -->  
  11.   <property name="initialSize" value="10" />  
  12.   <!-- 連接配接池的最大值 -->  
  13.   <property name="maxActive" value="100" />  
  14.   <!-- 最大空閑值.當經過一個高峰時間後,連接配接池可以慢慢将已經用不到的連接配接慢慢釋放一部分,一直減少到maxIdle為止 -->  
  15.   <property name="maxIdle" value="50" />  
  16.   <!-- 最小空閑值.當空閑的連接配接數少于閥值時,連接配接池就會預申請去一些連接配接,以免洪峰來時來不及申請 -->  
  17.   <property name="minIdle" value="10" />  
  18.   <!--#給出一條簡單的sql語句進行驗證-->  
  19.   <property name="validationQuery" value="select getdate()" />  
  20.   <!--#在取出連接配接時進行有效驗證-->  
  21.   <property name="removeAbandonedTimeout" value="120" />  
  22.   <property name="removeAbandoned" value="true" />  
  23.   <!-- #運作判斷連接配接逾時任務的時間間隔,機關為毫秒,預設為-1,即不執行任務。 -->  
  24.   <property name="timeBetweenEvictionRunsMillis" value="3600000" />  
  25.   <!-- #連接配接的逾時時間,預設為半小時。 -->  
  26.   <property name="minEvictableIdleTimeMillis" value="3600000" />    
  27. </bean>   
  28. <bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
  29.        <property name="dataSource" ref="dataSource"/>  
<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 連接配接池建立的連接配接的預設的TransactionIsolation狀态. 下面清單當中的某一個: (參考javadoc)
  • NONE
  • READ_COMMITTED
  • READ_UNCOMMITTED
  • REPEATABLE_READ
  • SERIALIZABLE
defaultCatalog 連接配接池建立的連接配接的預設的catalog

資料源連接配接數量配置:

initialSize 初始化連接配接:連接配接池啟動時建立的初始化連接配接數量,1.2版本後支援
maxActive 8 最大活動連接配接:連接配接池在同一時間能夠配置設定的最大活動連接配接的數量, 如果設定為非正數則表示不限制
maxIdle 最大空閑連接配接:連接配接池中容許保持空閑狀态的最大連接配接數量,超過的空閑連接配接将被釋放,如果設定為負數表示不限制
minIdle 最小空閑連接配接:連接配接池中容許保持空閑狀态的最小連接配接數量,低于這個數量将建立新的連接配接,如果設定為0則不建立
maxWait 無限 最大等待時間:當沒有可用連接配接時,連接配接池等待連接配接被歸還的最大時間(以毫秒計數),超過時間則抛出異常,如果設定為-1表示無限等待

資料源連接配接健康狀況檢查:

validationQuery SQL查詢,用來驗證從連接配接池取出的連接配接,在将連接配接傳回給調用者之前.如果指定,則查詢必須是一個SQL SELECT并且必須傳回至少一行記錄
testOnBorrow

指明是否在從池中取出連接配接前進行檢驗,如果檢驗失敗,則從池中去除連接配接并嘗試取出另一個.

注意: 設定為true後如果要生效,validationQuery參數必須設定為非空字元串

testOnReturn false 指明是否在歸還到池中前進行檢驗
testWhileIdle 指明連接配接是否被空閑連接配接回收器(如果有)進行檢驗.如果檢測失敗,則連接配接将被從池中去除.
timeBetweenEvictionRunsMillis -1 在空閑連接配接回收器線程運作期間休眠的時間值,以毫秒為機關. 如果設定為非正數,則不運作空閑連接配接回收器線程
numTestsPerEvictionRun 3 在每次空閑連接配接回收器線程(如果有)運作時檢查的連接配接數量
minEvictableIdleTimeMillis 1000 * 60 * 30 連接配接在池中保持空閑而不被空閑連接配接回收器線程(如果有)回收的最小時間值,機關毫秒

緩存語句:

poolPreparedStatements 開啟池的prepared statement 池功能
maxOpenPreparedStatements 不限制 statement池能夠同時配置設定的打開的statements的最大數量, 如果設定為0表示不限制

連接配接洩露回收:

removeAbandoned 标記是否删除洩露的連接配接,如果他們超過了removeAbandonedTimout的限制.如果設定為true, 連接配接被認為是被洩露并且可以被删除,如果空閑時間超過removeAbandonedTimeout. 設定為true可以為寫法糟糕的沒有關閉連接配接的程式修複資料庫連接配接.
removeAbandonedTimeout 300 洩露的連接配接可以被删除的逾時值, 機關秒
logAbandoned 标記當Statement或連接配接被洩露時是否列印程式的stack traces日志。被洩露的Statements和連接配接的日志添加在每個連接配接打開或者生成新的Statement,因為需要生成stack trace。

注意:

  1. Java資料庫連接配接有“8小時問題”,是以destroy-method="close"一定要加上。“8小時問題”是指一個連接配接空閑8小時資料庫會自動關閉,而資料源并不知道。
  2. 高并發下,可以testOnBorrow設定false,testWhileIdle設定為true,這樣就會定時對背景空連結進行檢測發現無用連接配接就會清除掉,不會每次都去都去檢測是否8小時的空連結。