Spring中bean.xml的連接池配置問題詳解

一、連接池概述
 數據庫連接池概述:
  數據庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤爲突出。對數據庫連接的管理能顯著影響到整個
應用程序的伸縮性和健壯性,影響到程序的性能指標。數據庫連接池正是針對這個問題提出來的。
  數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重複使用一個現有的數據庫連接,而再不是重新建立一個;釋放空閒時
間超過最大空閒時間的數據庫連接來避免因爲沒有釋放數據庫連接而引起的數據庫連接遺漏。這項技術能明顯提高對數據庫操作的性能。
  數據庫連接池在初始化時將創建一定數量的數據庫連接放到連接池中,這些數據庫連接的數量是由最小數據庫連接數來設定的。無論這些
數據庫連接是否被使用,連接池都將一直保證至少擁有這麼多的連接數量。連接池的最大數據庫連接數量限定了這個連接池能佔有的最大連接
數,當應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。數據庫連接池的最小連接數和最大連接數的設
置要考慮到下列幾個因素:
  1) 最小連接數是連接池一直保持的數據庫連接,所以如果應用程序對數據庫連接的使用量不大,將會有大量的數據庫連接資源被浪費;
  2) 最大連接數是連接池能申請的最大連接數,如果數據庫連接請求超過此數,後面的數據庫連接請求將被加入到等待隊列中,這會影響之
後的數據庫操作。
  3) 如果最小連接數與最大連接數相差太大,那麼最先的連接請求將會獲利,之後超過最小連接數量的連接請求等價於建立一個新的數據庫
連接。不過,這些大於最小連接數的數據庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重複使用或是空閒超時後被釋放。
目前常用的連接池有:C3P0、DBCP、Proxool
網上的評價是:
C3P0比較耗費資源,效率方面可能要低一點。
DBCP在實踐中存在BUG,在某些種情會產生很多空連接不能釋放,Hibernate3.0已經放棄了對其的支持。
Proxool的負面評價較少,現在比較推薦它,而且它還提供即時監控連接池狀態的功能,便於發現連接泄漏的情況。
配置如下:
1、在spring配置文件中,一般在applicationContext.xml中
     <bean id="proxoolDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
            <property name="driver" value="${jdbc.connection.driverClassName}"/>
            <property name="driverUrl" value="${jdbc.connection.url}"/>
            <property name="user" value="${jdbc.connection.username}"/>
            <property name="password" value="${jdbc.connection.password}"/>
            <!-- 測試的SQL執行語句 -->
           <property name="houseKeepingTestSql" value="${proxool.houseKeepingTestSql}"/>
            <!-- 最少保持的空閒連接數 (默認2個) -->
             <property name="prototypeCount" value="${proxool.prototypeCount}"/>
            <!-- proxool自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閒的連接就馬上回收,超時的銷燬 默認30秒) -->
            <property name="houseKeepingSleepTime" value="${proxool.hourseKeepingSleepTime}"/>
            <!-- 最大活動時間(超過此時間線程將被kill,默認爲5分鐘) -->
             <property name="maximumActiveTime" value="${proxool.maximumActiveTime}"/>
            <!-- 連接最長時間(默認爲4個小時) -->
            <property name="maximumConnectionLifetime" value="${proxool.maximumConnectionLifetime}"/>
            <!-- 最小連接數 (默認2個) -->
            <property name="minimumConnectionCount" value="${proxool.minimumConnectionCount}"/>
            <!-- 最大連接數 (默認5個) -->
            <property name="maximumConnectionCount" value="${proxool.maximumConnectionCount}"/>
            <!-- -->
            <property name="statistics" value="${proxool.statistics}"/>
            <!-- 別名 -->
             <property name="alias" value="${proxool.alias}"/>
            <!-- -->
            <property name="simultaneousBuildThrottle" value="${proxool.simultaneous-build-throttle}"/>
     </bean>
     然後注入到sessionFactory中
     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
           <property name="dataSource" ref="proxoolDataSource"/>
     </bean>
 
Porxool 配置文件
--==--==--==--==--==<proxool.xml>==--==--==--==--==--==--==
< ?xml version="1.0" encoding="UTF-8"?>
< proxool>
      <alias>WMS</alias>
      <driver-url>jdbc:postgresql://192.168.210.184:5432/wms</driver-url>
      <driver-class>org.postgresql.Driver</driver-class>
      <driver-properties>
             <property name="user" value="wms_user" />
             <property name="password" value="wms" />
      </driver-properties>
      <minimum-connection-count>2</minimum-connection-count>
      <maximum-connection-count>40</maximum-connection-count>
      <simultaneous-build-throttle>20</simultaneous-build-throttle>
      <prototype-count>2</prototype-count>
      <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
< /proxool>
--==--==--==--==--==<proxool.xml>==--==--==--==--==--==--==
 
配置說明:
alias                                          -〉數據庫連接別名(程序中需要使用的名稱)
driver-url                                   -〉數據庫驅動
driver-class                                -〉驅動程序類
driver-properties                        -〉聯機數據庫的用戶和密碼
minimum-connection-count          -〉最小連接數量,建議設置0以上,保證第一次連接時間
maximum-connection-count         -〉最大連接數量,如果超過最大連接數量則會拋出異常。連接數設置過多,服務器CPU和內存性能消耗很
大。
simultaneous-build-throttle          -〉同時最大連接數
prototype-count                          -〉一次產生連接的數量。
                                                 例:如果現在prototype-count設置爲4個,但是現在已經有2個可以獲得的連接,那麼
將會試圖再創建2個連接。
                                                  但不能超過最大連接數。
maximum-active-time                 -〉連接最大時間活動 默認5分鐘
maximum-connection-lifetime      -〉連接最大生命時間 默認4小時
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章