隨筆-46  評論-54  文章-0  trackbacks-0
          最近用 Hibernate 3 連接 Mysql 4 數(shù)據(jù)庫。
          調(diào)試時都還好,真正發(fā)布的時候毛病來了。
          每天早晨都要都會報錯,不能正常操作數(shù)據(jù)庫。
          Mysql 重啟,無效,Tomcat 重啟,有效。

          Mysql(MySQL 4.1) 文檔 7.5.2 節(jié)
          Tuning Server Parameters 里面
          在 Mysql控制臺下輸入 SHOW VARIABLES;
          最后一個參數(shù)
          wait_timeout?? ?28800
          如果單位是秒,也就是 8 個小時。
          程序最后一次建立連接完畢之后 8 個小時,
          Mysql 單方面關(guān)閉了這個連接。
          但 Hibernate 還在記憶著這個連接基本信息。
          程序再次連接的時候,已經(jīng)不存在了。

          不過,Hibernate 可以設(shè)置它自己的 timeout 。
          到了 Hibernate 3 默認(rèn)第三方的連接池管理,
          由 Apache 的 DBCP 項目更換成了 c3p0 項目
          它的屬性在 Hibernate 配置屬性有對應(yīng)的寫法,如:
          c3p0.maxIdleTime = hibernate.c3p0.timeout
          c3p0.maxPoolSize = hibernate.c3p0.max_size
          所以,要修改一下 hibernate.cfg.xml 文檔
          將 Hibernate 默認(rèn)連接池參數(shù)
          <property name="connection.pool_size">5</property>
          刪除或注釋掉,Hibernate 默認(rèn)連接池比較初級。
          然后,加入以下屬性
          <property name="hibernate.c3p0.timeout">1800</property>
          <property name="hibernate.c3p0.max_size">5</property>
          就可以使用 c3p0 來管理連接池了。
          其實這些屬性的參數(shù)名都可以在 Hibernate 文檔 3.3 節(jié)
          JDBC connections 里面找到。
          按照相應(yīng)的格式更改名字和值就可以了。

          posted on 2006-02-14 19:43 rox 閱讀(12510) 評論(5)  編輯  收藏 所屬分類: hibernate

          評論:
          # re: Hibernate與Mysql使用c3p0連接池時的一點注意。 2006-03-15 21:58 | rox
          在嘗試了修改hibernate c3p0設(shè)置,更改為使用Tomcat自己的連接池后仍然沒有改善。
          決定從根源入手,設(shè)置mysql的wait_timeout為31536000(一年),再來試試。

          [mysqld]
          set-variable=wait_timeout=31536000
          set-variable=interactive_timeout=31536000

          仍然沒有改善,看來是代碼有問題。  回復(fù)  更多評論
            
          # 轉(zhuǎn)貼 風(fēng)間小筑 的 c3p0 & proxool 2006-04-14 14:10 | rox
          他的Blog已經(jīng)不能訪問了,這些內(nèi)容都是用Google的網(wǎng)頁快照找來的。

          前一段時間用c3p0作hibernate3的連接池,發(fā)現(xiàn)連接數(shù)總是很多,并不能釋放,用幾天就會占用100多個數(shù)據(jù)庫連接,嘗試修改了幾次配置文件問題依舊,無奈換成了proxool,問題居然解決了。

          c3p0配置
          <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
          <property name="hibernate.c3p0.max_size">20</property>
          <property name="hibernate.c3p0.min_size">5</property>
          <property name="hibernate.c3p0.timeout">120</property>
          <property name="hibernate.c3p0.max_statements">100</property>
          <property name="hibernate.c3p0.idle_test_period">120</property>
          <property name="hibernate.c3p0.acquire_increment">2</property>

          proxool配置
          <property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
          <property name="hibernate.proxool.pool_alias">xjgame</property>
          <property name="hibernate.proxool.xml">proxool.xml</property>


          <?xml version="1.0" encoding="ISO-8859-1"?>
          <something-else-entirely>
          <proxool>
          <alias>xjgame</alias>
          <driver-url>jdbc:oracle:thin:@123.123.123.12:1521:game</driver-url>
          <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
          <driver-properties>
          <property name="user" value="a"/>
          <property name="password" value="a"/>
          </driver-properties>
          <maximum-connection-count>20</maximum-connection-count>
          <house-keeping-test-sql>select CURRENT_DATE from dual</house-keeping-test-sql>
          </proxool>
          </something-else-entirely>  回復(fù)  更多評論
            
          # re: Hibernate與Mysql使用c3p0連接池時的一點注意。 2009-05-25 13:28 | 深泉
          我是hibernate+c3p0+mysql
          映射的表又12張,由12個VO對象和表發(fā)生映射關(guān)系,在初始化hibernate的時候,c3p0連接池初始化了12次,每次由于一開始設(shè)置的initialPoolSize=3,所以等啟動完畢,tomcat就產(chǎn)生了36個連接。請問這是怎么回事,是c3p0的默認(rèn)方式嗎?
          找了很多資料都沒有找到相關(guān)資料。  回復(fù)  更多評論
            
          # re: Hibernate與Mysql使用c3p0連接池時的一點注意。 2009-05-25 14:28 | rox
          @深泉
          不好意思,c3p0是因為當(dāng)時對hibernate不是很熟,有頻繁出現(xiàn)錯誤,沒有辦法才轉(zhuǎn)的。
          后來發(fā)現(xiàn),還是自己代碼的問題。
          現(xiàn)在主要還是使用DBCP。
          確認(rèn)一下sessionFactory沒有重復(fù)配置。
          另外,initialPoolSize=3,只是初始連接池的大小,并不會對每個連接重復(fù)復(fù)制,即使是代碼或者配置的錯誤,也不應(yīng)該出現(xiàn)36的現(xiàn)象。
          你可以試試,換成DBCP的試試,這種現(xiàn)象有沒有再次出現(xiàn)。  回復(fù)  更多評論
            
          # re: Hibernate與Mysql使用c3p0連接池時的一點注意。 2009-10-06 22:32 | wateray
          >每次由于一開始設(shè)置的initialPoolSize=3,所以等啟動完畢,tomcat就產(chǎn)生了36個連接。

          ----------我要出現(xiàn)這種情況,每次連接會創(chuàng)建initialPoolSize設(shè)定的個數(shù)。
          不要設(shè)置屬性!!!
          c3p0官方文檔。
          c3p0-native property name hibernate configuration key
          c3p0.acquireIncrement hibernate.c3p0.acquire_increment
          c3p0.idleConnectionTestPeriod hibernate.c3p0.idle_test_period
          c3p0.initialPoolSize not available -- uses minimum size
          c3p0.maxIdleTime hibernate.c3p0.timeout
          c3p0.maxPoolSize hibernate.c3p0.max_size
          c3p0.maxStatements hibernate.c3p0.max_statements
          c3p0.minPoolSize hibernate.c3p0.min_size
          c3p0.testConnectionsOnCheckout hibernate.c3p0.validate hibernate 2.x only!

          在hibernate.cfx.hbm里面只能且必須設(shè)置上面這些屬性,其中,c3p0.initialPoolSize 不能設(shè)置(也無法設(shè)置,沒有對應(yīng)的屬性)。其他屬性只能在單獨的 c3p0.properties 里面設(shè)置。

          http://www.mchange.com/projects/c3p0/index.html#initialPoolSize  回復(fù)  更多評論
            
          主站蜘蛛池模板: 如东县| 四会市| 德阳市| 吉林省| 将乐县| 禹州市| 宣武区| 威远县| 八宿县| 措美县| 康乐县| 桂林市| 五常市| 芦溪县| 安达市| 洮南市| 耿马| 安康市| 西林县| 奉贤区| 赤城县| 祁阳县| 海安县| 安岳县| 湘潭市| 凉城县| 洛浦县| 怀远县| 北碚区| 宣化县| 晋江市| 江永县| 左贡县| 张家川| 南康市| 开封县| 从化市| 仁寿县| 灵山县| 鲁山县| 亳州市|