Spring整合Hibernate_數據源Datasource_dbcp連接池


1,  Spring指定 datasource

DataSource接口,在javax.sql包,里邊有一個getConnection()方法。提供了標准化的取得連接的方式。只要實現了這個接口。Sun這個土鱉定的。

   a)         參考文檔,找dbcp.BasicDataSource  (dbcp:database connection pool數據庫連接池)

    i.  c3p0

    ii.     dbcp

    iii.    proxool

  b)        在DAO或者Service中注入dataSource

  c)         在Spring中可以使用PropertyPlaceHolderConfigure來讀取properties文件的內容

在beans.xml配置里寫:

 <!-- DataSource去哪里讀取連接池配置 -->
       
       <bean         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
            <!-- 在src根目錄下建jdbc.properties配置文件 -->
            <value>classpath:jdbc.properties</value>
                </property>
        </bean>                    

DataSource:注意這里使用dbcp,使用dbcp需要2個包:commons-dbcp.jar,commons-pool.jar

 <!-- dbcp連接池 ,根據上邊的配置去配置文件去讀取配置-->
        <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="initialSize" value="5"/>
              <property name="maxActive" value="20"/>
        </bean>

在src根目錄建jdbc.properties配置,名稱和DataSource里要一致:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring
jdbc.username=root
jdbc.password=root

將DataSource數據源注入到DAO:

<bean id="userDAO" class="com.oracle.dao.impl.UserDAOImpl">
            <property name="dataSource" ref="dataSource"></property>
        </bean>

dbcp連接池配置:

 

  <!-- 連接池啟動時的初始值 -->
  <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="testOnBorrow" value="true" />
  <property name="removeAbandonedTimeout" value="120" />
  <property name="removeAbandoned" value="true" />
  <!-- #運行判斷連接超時任務的時間間隔,單位為毫秒,默認為-1,即不執行任務。 -->
  <property name="timeBetweenEvictionRunsMillis" value="3600000" />
  <!-- #連接的超時時間,默認為半小時。 -->
  <property name="minEvictableIdleTimeMillis" value="3600000" />  
 </bean>

 

( 以下內容摘在springside):
DBCP的性能配置主要是4個參數
#連接池啟動時的初始值.
dbcp.initialSize=10 
#連接池的最大值.
dbcp.maxActive=50 
#最大空閑值.當經過一個高峰時間后,連接池可以慢慢將已經用不到的連接慢慢釋放一部分,一直減少到maxIdle為止。
dbcp.maxIdle=20 
#最小空閑值.當空閑的連接數少於閥值時,連接池就會預申請去一些連接,以免洪峰來時來不及申請。
dbcp.minIdle=5 
一般這幾個參數應該放在applicationContext.properties里方便部署時快速修改。
有兩種配置風格,
  比如較少使用者的管理界面,平時的使用者不多,但瞬時可能會有較多的使用者,如Mini-Web,會設置一個較低的maxIdle 而設置較高的maxActive。 
  比如長期高負荷運行的業務系統,會設置一個合理的maxIdle值,且maxActive==maxIdle 
長期idle連接的處理:
Mysql服務端會斷開超過8小時的空閑連接,如果系統只在白天工作時間被使用,DBCP的連接就很容易被斷開的連接,而且DBCP對jdbc url里設置autoReconnect=true是無效。
更好的做法DBCP主動斷開超時的連接。
#運行判斷連接超時任務的時間間隔,單位為毫秒,默認為-1,即不執行任務。
timeBetweenEvictionRunsMillis=3600000
#連接的超時時間,默認為半小時。
minEvictableIdleTimeMillis=3600000
經測試,按上面的設置,DBCP會在連接idle兩小時后將其斷開。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM