zoukankan      html  css  js  c++  java
  • 使用hibernate连接mysql自动中断的问题

    关键字:   hibernate, mysql, c3p0    

    数据库为mysql,客户端使用hibernate进行连接,结果长时间没有数据访问的话,重新访问数据库就会报错:

    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服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。

    解决的方法有3种:

    1. 增加wait_timeout的时间。
    2. 减少Connection pools中connection的lifetime。
    3. 测试Connection pools中connection的有效性。

    使用c3p0解决上面问题的配置如下:

       <!-- C3P0 Connection Pool-->

    java 代码
    1. <!-- C3P0 Connection Pool-->  
    2.     "c3p0.min_size">10   
    3.     "c3p0.max_size">100   
    4.     "c3p0.timeout">10   
    5.     "c3p0.acquireRetryAttempts">30   
    6.   
    7.     "c3p0.acquireIncrement">5   
    8.   
    9.     <!--<span class="comment">//set to something much less than wait_timeout, prevents connections from going stale-->
    10.     "c3p0.idleConnectionTestPeriod">300   
    11.   
    12.     "c3p0.initialPoolSize">20   
    13.     "c3p0.maxPoolSize">100   
    14.     <!--<span class="comment">//set to something slightly less than wait_timeout, preventing 'stale' connections from being handed out -->
    15.     "c3p0.maxIdleTime">300   
    16.     "c3p0.maxStatements">50   
    17.     "c3p0.minPoolSize">10 
  • 相关阅读:
    sdut 2413:n a^o7 !(第三届山东省省赛原题,水题,字符串处理)
    poj 2406:Power Strings(KMP算法,next[]数组的理解)
    hrbustoj 1551:基础数据结构——字符串2 病毒II(字符串匹配,BM算法练习)
    hrbustoj 1179:下山(DFS+剪枝)
    [Linux] 通过指令修改时区 tzselect
    Ubuntu 历史版本下载
    RK3288 USB UVC camera 摄像头 VIDIOC_DQBUF Failed!!! err[I/O error]
    Android Activity活动状态及生存周期
    Android 系统四大组件
    Android JNI访问Java成员
  • 原文地址:https://www.cnblogs.com/lgms2008/p/832107.html
Copyright © 2011-2022 走看看