OMG,到底在尋找什么..................
          (構(gòu)造一個(gè)完美的J2EE系統(tǒng)所需要的完整知識(shí)體系)
          posts - 198,  comments - 37,  trackbacks - 0
          最近的一個(gè)項(xiàng)目在Hibernate使用C3P0的連接池,數(shù)據(jù)庫為Mysql。開發(fā)測試沒有問題,在運(yùn)行中每個(gè)一段長的空閑時(shí)間就出現(xiàn)異常:
          java 代碼
          1. org.hibernate.exception.JDBCConnectionException:?could?not?execute?query ??
          2. ????at?org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74) ??
          3. ????at?org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) ??
          4. ????....... ??
          5. Caused?by:?com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException:?No?operations?allowed?after?connection?closed.Connection?was?implicitly?closed?due?to?underlying?exception/error: ??
          6. ??
          7. ??
          8. **?BEGIN?NESTED?EXCEPTION?**? ??
          9. ??
          10. com.mysql.jdbc.CommunicationsException ??
          11. MESSAGE:?Communications?link?failure?due?to?underlying?exception:? ??
          12. ??
          13. **?BEGIN?NESTED?EXCEPTION?**? ??
          14. ??
          15. java.net.SocketException ??
          16. MESSAGE:?Broken?pipe ??
          17. ??
          18. STACKTRACE: ??
          19. ??
          20. java.net.SocketException:?Broken?pipe ??
          21. ????at?java.net.SocketOutputStream.socketWrite0(Native?Method) ??
          22. ????...... ??
          23. **?END?NESTED?EXCEPTION?** ??

          查看了Mysql的文檔,以及Connector/J的文檔以及在線說明發(fā)現(xiàn),出現(xiàn)這種異常的原因是:

          ?? Mysql服務(wù)器默認(rèn)的“wait_timeout”是8小時(shí),也就是說一個(gè)connection空閑超過8個(gè)小時(shí),Mysql將自動(dòng)斷開該connection。這就是問題的所在,在C3P0 pools中的connections如果空閑超過8小時(shí),Mysql將其斷開,而C3P0并不知道該connection已經(jīng)失效,如果這時(shí)有Client請求connection,C3P0將該失效的Connection提供給Client,將會(huì)造成上面的異常。

          解決的方法有3種:

          1. 增加wait_timeout的時(shí)間。
          2. 減少Connection pools中connection的lifetime。
          3. 測試Connection pools中connection的有效性。

          當(dāng)然最好的辦法是同時(shí)綜合使用上述3種方法,下面就DBCP和C3P0分別做一說明,假設(shè)wait_timeout為默認(rèn)的8小時(shí)

          DBCP增加以下配置信息:

          1. //set?to?'SELECT?1' ??
          2. validationQuery?=?"SELECT?1"??
          3. //set?to?'true' ??
          4. testWhileIdle?=?"true"? ??
          5. //some?positive?integer ??
          6. timeBetweenEvictionRunsMillis?=?3600000??
          7. //set?to?something?smaller?than?'wait_timeout' ??
          8. minEvictableIdleTimeMillis?=?18000000??
          9. //if?you?don't?mind?a?hit?for?every?getConnection(),?set?to?"true" ??
          10. testOnBorrow?=?"true"??

          C3P0增加以下配置信息:

          1. //set?to?'SELECT?1'??? ??
          2. preferredTestQuery?=?'SELECT?1'? ??
          3. ?//set?to?something?much?less?than?wait_timeout,?prevents?connections?from?going?stale ??
          4. idleConnectionTestPeriod?=?18000?? ??
          5. //set?to?something?slightly?less?than?wait_timeout,?preventing?'stale'?connections?from?being?handed?out ??
          6. maxIdleTime?=?25000? ??
          7. //if?you?can?take?the?performance?'hit',?set?to?"true" ??
          8. testConnectionOnCheckout?=?true????

          更多的配置信息大家可以查看C3P0文檔,Connector/J文檔,以及DBCP的文檔

          posted on 2006-12-25 19:01 OMG 閱讀(661) 評論(0)  編輯  收藏 所屬分類: Hibernate

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

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          IT風(fēng)云人物

          文檔

          朋友

          相冊

          經(jīng)典網(wǎng)站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 长治市| 芦溪县| 贺州市| 德江县| 钟祥市| 大港区| 霸州市| 长宁区| 肇州县| 五大连池市| 东源县| 保康县| 怀宁县| 察哈| 达拉特旗| 酒泉市| 平塘县| 湘潭市| 定襄县| 镇平县| 稷山县| 永兴县| 金湖县| 大埔区| 巢湖市| 汉源县| 西乌| 巨野县| 海晏县| 五常市| 舞阳县| 邵阳县| 喜德县| 天津市| 北安市| 崇明县| 静安区| 砀山县| 浮梁县| 林口县| 集安市|