如需轉載,請注明出自:  http://www.aygfsteel.com/fantasyginge/
              在項目中嘗試使用了幾種開源的數據庫連接池實現。一種是dbcp,一種是c3p0,還有一種是proxool,這幾種數據庫連接池都可以很容易的在Spring配置起來。性能總體上上感覺dbcp為最優,因為穩定性和并發性都是我的項目需要的。
               項目中經過反復測試,如果web server和數據庫server不是同一個機器的話,在斷網時間比較短的時間內三種數據庫連接池都能較好的重連,但是在斷網時間超過8個鐘頭proxool就不能恢復工作了。但是dbcp卻能很快的重新連接。實際生產環境中穩定性和總體性能是最重要的,都需要做相應的測試才能放心的讓系統上生產線。


          這里給出項目中數據庫連接池配置:

          dbcp的jndi:
          1<bean id="dataSource"
          2        class="org.springframework.jndi.JndiObjectFactoryBean">
          3        <property name="jndiName">
          4        <value>java:comp/env/jdbc/mysql</value>
          5        </property>
          6        </bean>

          proxool(proxool-0.9.0RC1)的配置:
          <bean id="MySqlDataSource"
            class
          ="org.logicalcobwebs.proxool.ProxoolDataSource"
            lazy-init
          ="false">
            
          <property name="driver">
             
          <value>com.mysql.jdbc.Driver</value>
            
          </property>
            
          <property name="driverUrl">
             
          <value>jdbc:mysql://ip:3306/dbname?useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true</value>
            
          </property>
            
          <property name="user">
             
          <value>user</value>
            
          </property>
            
          <property name="password">
             
          <value>password</value>
            
          </property>
            
          <property name="maximumConnectionCount">
             
          <value>500</value>
            
          </property>
            
          <property name="houseKeepingSleepTime">
             
          <value>15000</value>
            
          </property>
            
          <property name="houseKeepingTestSql">
             
          <value>select CURRENT_DATE</value>
            
          </property>
            
          <property name="testBeforeUse">
             
          <value>true</value>
            
          </property>
            
          <property name="alias">
             
          <value>mysqlProxoolDataSource</value>
            
          </property>
            
          <!--
            <property name="maximumActiveTime">
             <value>10000</value>
            </property>
            
          -->
            
          <property name="simultaneousBuildThrottle">
             
          <value>1000</value>
            
          </property>
            
          <property name="trace">
             
          <value>false</value>
            
          </property>
           
          </bean>




          建議使用DBCP,配置在tomcat中,然后在spring中使用jndi的形式獲取。

          c3p0(c3p0-0.9.0):
           1<bean id="dataSource"     class="com.mchange.v2.c3p0.ComboPooledDataSource"
           2        destroy-method="close">
           3        <property name="driverClass">
           4        <value>com.mysql.jdbc.Driver</value>
           5        </property>
           6        <property name="jdbcUrl">
           7        <value>jdbc:mysql://192.168.0.225:3306/sendinmdb?useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true</value>
           8        </property>
           9        <property name="user">
          10        <value>********</value>
          11        </property>
          12        <property name="password">
          13        <value>********</value>
          14        </property>
          15        <property name="maxPoolSize">
          16        <value>100</value>
          17        </property>
          18        <property name="maxIdleTime">
          19        <value>50</value>
          20        </property>
          21        <property name="maxStatementsPerConnection">
          22        <value>100</value>
          23        </property>
          24        <property name="numHelperThreads">
          25        <value>1000</value>
          26        </property>
          27        <property name="idleConnectionTestPeriod">
          28        <value>30</value>
          29        </property>
          30        </bean>




          直接copy & paste到spring配置文件里就可以使用了。

           

           

          配置一些額外的tomcat 的DBCP連接池參數,也可以更好的使用到類似proxool提供的功能,只是dbcp更加穩定而已。

          tomcat/conf/context.xml中插入一個Resource元素:

          <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"
           maxActive
          ="1000" maxIdle="30" maxWait="10000"
           username
          ="user" password="password" driverClassName="com.mysql.jdbc.Driver"
           validationQuery 
          = "select current_date()"
           testOnBorrow 
          = "true" testOnReturn = "false"  testWhileIdle = "true"
           timeBetweenEvictionRunsMillis 
          = "15000" numTestsPerEvictionRun = "10" minEvictableIdleTimeMillis = "600000"
           url
          ="jdbc:mysql://ip:3306/sendinmdb?useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true"/>

           

          解釋一下以下這些參數的含義:
          validationQuery = "select current_date()"
           testOnBorrow = "true"
           testOnReturn = "false" 
          testWhileIdle = "true"

          當從池中獲取一個Connection后使用 select current_date() 來測試該數據庫連接的可用性,如果SQL語句返回結果則認為是一個有效的連接,否則將繼續測試知道可以拿到有效的連接。當返回Connection給池的時候不進行驗證,但是Connection空閑的時候就要進行認證。


          timeBetweenEvictionRunsMillis = "15000"
          DBCP 清空線程睡眠的間隙,如值為負數則不運行該線程

          numTestsPerEvictionRun = "10"
          清空線程每次驗證的連接對象個數


          minEvictableIdleTimeMillis = "600000"

          Connection對象可以在池中空閑的最小時間,單位為毫秒


          詳細配置請訪問
          http://jakarta.apache.org/commons/dbcp/configuration.html
          posted on 2006-03-22 16:15 fantasyginge 閱讀(6981) 評論(4)  編輯  收藏 所屬分類: Database
          Comments
          • # re: 幾種開源數據庫連接池的使用感受
            小琴
            Posted @ 2007-05-22 12:00
            c3p0的配置是正確的。proxool我按照你的配置方式,總是報錯:org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: 調用中無效的參數。不知道你是不是也在spring里面配置的呢。能給回復嗎。  回復  更多評論   
          • # re: 幾種開源數據庫連接池的使用感受
            fantasyginge
            Posted @ 2007-05-25 15:01
            @小琴

            已經更新這篇文章,去掉了數字,你可以直接copy過去試,這個是我在項目中都使用過的配置  回復  更多評論   
          • # re: 幾種開源數據庫連接池的使用感受
            Norvid
            Posted @ 2008-04-11 10:53
            注意到你配置中寫到“autoReconnect=true”。你這個是MySQL專用的吧?Oracle啥的就重連不上了。

            我沒找到什么好的辦法,又不能重啟JEE服務器,當然我也不可能盯著。只好重新刷beanfactory了,讓所有的service bean,包括beanfactory重新初始化。

            你有什么好辦法?  回復  更多評論   
          • # re: 幾種開源數據庫連接池的使用感受
            fantasyginge
            Posted @ 2008-04-16 08:09
            請查看 http://ginge.javaeye.com 有關dbcp的文章  回復  更多評論   

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
           
          主站蜘蛛池模板: 云安县| 阳信县| 平乐县| 思茅市| 余江县| 苗栗县| 云梦县| 陵水| 垫江县| 宽城| 通山县| 永寿县| 奉贤区| 德安县| 松江区| 海兴县| 西青区| 尚义县| 滨海县| 唐河县| 武平县| 黄浦区| 宜丰县| 盖州市| 汽车| 吉隆县| 武汉市| 盐山县| 绵阳市| 阿巴嘎旗| 台安县| 南江县| 九台市| 合江县| 邢台市| 余干县| 广东省| 巴马| 阿城市| 项城市| 潮安县|