內蒙古java團隊

          j2se,j2ee開發組
          posts - 139, comments - 212, trackbacks - 0, articles - 65
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          日歷

          <2006年12月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          公告

          發展經濟!

          發展GPS!

          友情鏈接

          搜索

          •  

          積分與排名

          • 積分 - 340305
          • 排名 - 163

          最新評論

          hibernate連接池配置

          Posted on 2006-12-26 10:42 帥子 閱讀(1013) 評論(0)  編輯  收藏 所屬分類: j2se技術專區


          以下三種連接都是以連接MySQl為例。

          <!-- JDBC驅動程序 -->
          <property name="connection.driver_class">org.gjt.mm.mysql.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK</property> <!-- 數據庫用戶名 -->
          <property name="connection.username">root</property> <!-- 數據庫密碼 -->
          <property name="connection.password">8888</property>

          上面的一段配置,在c3p0和dbcp中,都是必需的,因為hibernate會根據上述的配置來生成connections,再交給c3p0或dbcp管理.但是,proxool則不能,雖然說服文檔上說proxool也可以和hibernate結合,但我按照官方文檔上的說明怎么配也出錯,而且,到了sun和hibernat有的官方網站上問了幾天,都沒有一個人回復。后來我只能讓proxool自身來生成連接,這在下面再講。


          1 C3P0

          只需在hibernate.cfg.xml中加入
          <property name="c3p0.min_size">5</property>
          <property name="c3p0.max_size">30</property>
          <property name="c3p0.time_out">1800</property>
          <property name="c3p0.max_statement">50</property>

          還有在classespath中加入c3p0-0.8.4.5.jar


          2 dbcp

          在hibernate.cfg.xml中加入

          <property name="dbcp.maxActive">100</property>
          <property name="dbcp.whenExhaustedAction">1</property>
          <property name="dbcp.maxWait">60000</property>
          <property name="dbcp.maxIdle">10</property>

          <property name="dbcp.ps.maxActive">100</property>
          <property name="dbcp.ps.whenExhaustedAction">1</property>
          <property name="dbcp.ps.maxWait">60000</property>
          <property name="dbcp.ps.maxIdle">10</property>


          還有在classespath中加入commons-pool-1.2.jar 和commons-dbcp-1.2.1.jar.


          3 proxool

          在hibernate.cfg.xml中加入

          <property name="proxool.pool_alias">pool1</property>
          <property name="proxool.xml">ProxoolConf.xml</property>
          <property name="connection.provider_class">net.sf.hibernate.connection.ProxoolConnectionProvider</property>

          然后,在和hibernate.cfg.xml同一個目錄下,加一個ProxoolConf.xml文件,內容為

          <?xml version="1.0" encoding="utf-8"?>
          <!-- the proxool configuration can be embedded within your own application's.
          Anything outside the "proxool" tag is ignored. -->
          <something-else-entirely>
          <proxool>
          <alias>pool1</alias>
          <!--proxool只能管理由自己產生的連接-->
          <driver-url>jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK</driver-url>
          <driver-class>org.gjt.mm.mysql.Driver</driver-class>
          <driver-properties>
          <property name="user" value="root"/>
          <property name="password" value="8888"/>
          </driver-properties>
          <!-- proxool自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閑的連接就馬上回收,超時的銷毀-->
          <house-keeping-sleep-time>90000</house-keeping-sleep-time>
          <!-- 指因未有空閑連接可以分配而在隊列中等候的最大請求數,超過這個請求數的用戶連接就不會被接受-->
          <maximum-new-connections>20</maximum-new-connections>
          <!-- 最少保持的空閑連接數-->
          <prototype-count>5</prototype-count>
          <!-- 允許最大連接數,超過了這個連接,再有請求時,就排在隊列中等候,最大的等待請求數由maximum-new-connections決定-->
          <maximum-connection-count>100</maximum-connection-count>
          <!-- 最小連接數-->
          <minimum-connection-count>10</minimum-connection-count>
          </proxool>
          </something-else-entirely>


          并在classespath中加入proxool-0.8.3.jar



          結論:

          由于在hibernate3.0中,已經不再支持dbcp了,hibernate的作者在hibernate.org中,明確指出在實踐中發現dbcp有BUG,在某些種情會產生很多空連接不能釋放,所以拋棄了對dbcp的支持。我不知是否在dbcp最新版本中解決了這個問題,我以前在一個訪問量不大的項目中用過dbcp,運行了一年多都沒出現問題。不過在網上的確也有不少網友指出dbcp在大型的應用中會出現不穩定的情況。所以在真相未經證實的情況下,我覺得對dbcp持慎重的態度。

          至于c3p0,有評論說它的算法不是最優的,而且,我在matrix中,見到有網友做了一個實驗,在同一項目中分別用了幾個常用的連接池,然后測試其性能,發現c3p0占用資源比較大,效率也不高。

          所以,基于上述原因,我才花兩晚的時間去研究proxool的配置,proxool不少行家推薦使用,而且暫時來說,是負面評價是最少的一個。在三星中也有項目是用proxool的。

          歡迎大家就連接池的問題多研究,多多發表自己的經驗心得。
          主站蜘蛛池模板: 韩城市| 罗山县| 西乡县| 石楼县| 兰州市| 绍兴市| 九龙县| 岐山县| 宁安市| 平和县| 隆回县| 内江市| 阳西县| 新兴县| 龙里县| 鄱阳县| 衡东县| 武平县| 苏尼特右旗| 浏阳市| 龙里县| 汤原县| 卓尼县| 府谷县| 洮南市| 疏勒县| 阳谷县| 阜城县| 富源县| 盘山县| 海丰县| 霍邱县| 石棉县| 阳泉市| 横山县| 城固县| 宣威市| 民乐县| 二手房| 和龙市| 铁岭县|