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


          這里給出項(xiàng)目中數(shù)據(jù)庫連接池配置:

          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連接池參數(shù),也可以更好的使用到類似proxool提供的功能,只是dbcp更加穩(wěn)定而已。

          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"/>

           

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

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


          timeBetweenEvictionRunsMillis = "15000"
          DBCP 清空線程睡眠的間隙,如值為負(fù)數(shù)則不運(yùn)行該線程

          numTestsPerEvictionRun = "10"
          清空線程每次驗(yàn)證的連接對象個數(shù)


          minEvictableIdleTimeMillis = "600000"

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


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

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

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

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

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


          網(wǎng)站導(dǎo)航:
           
           
          主站蜘蛛池模板: 电白县| 平江县| 慈利县| 江西省| 交口县| 松江区| 哈巴河县| 叶城县| 南木林县| 建昌县| 古蔺县| 陇西县| 巩留县| 临安市| 邵阳市| 资源县| 监利县| 揭阳市| 延安市| 丽江市| 三穗县| 江陵县| 临猗县| 类乌齐县| 吴旗县| 安义县| 错那县| 涪陵区| 红桥区| 五指山市| 陆丰市| 兴安盟| 广安市| 延庆县| 忻城县| 翼城县| 辽阳县| 安庆市| 固始县| 尼玛县| 周至县|