<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Energy of Love  
    日歷
    <2009年8月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345
    統計
    • 隨筆 - 70
    • 文章 - 0
    • 評論 - 80
    • 引用 - 0

    導航

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

     

    最近的一個項目在Hibernate使用C3P0的連接池,數據庫為Mysql。開發測試沒有問題,在運行中每個一段長的空閑時間就出現異常:


    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. ** BEGIN NESTED EXCEPTION **
    7. com.mysql.jdbc.CommunicationsException
    8. MESSAGE: Communications link failure due to underlying exception:
    9. ** BEGIN NESTED EXCEPTION **
    10. java.net.SocketException
    11. MESSAGE: Broken pipe
    12. STACKTRACE:
    13. java.net.SocketException: Broken pipe
    14. at java.net.SocketOutputStream.socketWrite0(Native Method)
    15. ......
    16. ** END NESTED EXCEPTION **

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

    Mysql服務器默認的“wait_timeout”是8小時,也就是說一個connection空閑超過8個小時,Mysql將自動斷開該connection。這就是問題的所在,在C3P0 pools中的connections如果空閑超過8小時,Mysql將其斷開,而C3P0并不知道該connection已經失效,如果這時有Client請求connection,C3P0將該失效的Connection提供給Client,將會造成上面的異常。

    解決的方法有3種:

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

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

    DBCP增加以下配置信息:

  • //set to 'SELECT 1'
  • validationQuery = "SELECT 1"
  • //set to 'true'
  • testWhileIdle = "true"
  • //some positive integer
  • timeBetweenEvictionRunsMillis = 3600000
  • //set to something smaller than 'wait_timeout'
  • minEvictableIdleTimeMillis = 18000000
  • //if you don't mind a hit for every getConnection(), set to "true"
  • testOnBorrow = "true"




    C3P0增加以下配置信息:
     

  • //獲取connnection時測試是否有效
  • testConnectionOnCheckin = true
  • //自動測試的table名稱
  • automaticTestTable=C3P0TestTable
  • //set to something much less than wait_timeout, prevents connections from going stale
  • idleConnectionTestPeriod = 18000
  • //set to something slightly less than wait_timeout, preventing 'stale' connections from being handed out
  • maxIdleTime = 25000
  • //if you can take the performance 'hit', set to "true"
  • testConnectionOnCheckout = true
  •  

     

     

    在配置文件中要寫成  <property name="minPoolSize"><value>1</value></property> 格式

    不能寫成 這樣<property name="properties">
       <props>
        <prop key="c3p0.initialPoolSize">1</prop>

       </props>

    </property>

    c3p0不能完全識別!!

    posted on 2009-08-11 17:27 不高興 閱讀(375) 評論(0)  編輯  收藏 所屬分類: JavaSpring
     
    Copyright © 不高興 Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 亚洲中文字幕第一页在线| 成人永久免费高清| 国产精品亚洲成在人线| 日本一区二区三区免费高清在线| 日日操夜夜操免费视频| 国产精品观看在线亚洲人成网| 四虎影院免费在线播放| 久久久久亚洲av无码尤物| 韩日电影在线播放免费版| 国产亚洲精品岁国产微拍精品| 中国精品一级毛片免费播放| 亚洲色欲久久久综合网| 小日子的在线观看免费| 久久久久久亚洲AV无码专区| 在线永久免费的视频草莓| 亚洲综合校园春色| 国产精品国产午夜免费福利看| 黄色一级视频免费观看| 拍拍拍无挡视频免费观看1000 | 亚洲五月丁香综合视频| 西西大胆无码视频免费| 亚洲AV无码一区二区三区电影 | 亚洲AV第一成肉网| heyzo亚洲精品日韩| 免费无码作爱视频| 亚洲国产精品久久人人爱| 日韩一级免费视频| 成人精品视频99在线观看免费| 亚洲一区二区三区首页 | 亚洲国产一成久久精品国产成人综合 | 亚洲AV无码一区二区三区鸳鸯影院| 波多野结衣视频在线免费观看 | 91亚洲国产成人久久精品| 免费看无码自慰一区二区| 窝窝影视午夜看片免费| 五月天网站亚洲小说| 在线免费观看一区二区三区| 精品熟女少妇aⅴ免费久久| 亚洲国产理论片在线播放| 亚洲国产人成中文幕一级二级| 久久国产精品免费视频|