• dbcp或者C3P0连接池异常 Communications link failure


    1、一般是mysql数据库设置timeout时间为8小时,mysql自动关闭连接,而连接池却不明确连接已关闭,因此导致再次使用链接时,连接失效。

    出现这种异常的原因是:
    Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。这就是问题的所在,在C3P0 pools中的connections如果空闲超过8小时,mysql将其断开,而C3P0并不知道该connection已经失效,如果这时有Client请求connection,C3P0将该失效的Connection提供给Client,将会造成上面的异常。
    a)解决的方法有3种:
        增加wait_timeout的时间。
        减少Connection pools中connection的lifetime。
        测试Connection pools中connection的有效性。
    b)具体解决方案:
       1、换一下JDBC驱动,JDBC3.1.0-alpha及以前版本会出现此问题,下载新的JDBC驱动
       2、使用hibernate配置:
    使用hibernate: 
    <property name="connection.autoReconnect">true</property>  <!--这个是最主要的--> 
    <property name="connection.autoReconnectForPools">true</property> 
    <property name="connection.is-connection-validation-required">true</property> 
    加入以上property,可解决此问题,如果未使用hibernate等持久化管理框架,可在mysql的url中加入autoReconnect=true,这样就可以解决。
    原因很简单。在对数据库操作结束后关闭连接是正确的做法,没什么大问题。至于出现:No operations allowed after connection closed。这样的问题原因只有一个,你这里和数据库的连接Connection是一个Static的,程序共享这一个Connection。所以第一次对数据库操作没问题,当把Connection关闭后,第二次还想操作数据库时Connection肯定不存在了。
    
  • 相关阅读:
    objectc 垃圾回收机制
    core date
    core data 中删除一个对象
    cell.accessoryType
    使用core data 框架
    Excel cell format in dynamcis ax 2009
    How to using X++ code to add security checking for go to main table
    Dos命令
    How to fix to report is empty issue
    Hot to catching ClrErrors in Dynamics AX
  • 原文地址:https://www.cnblogs.com/xuzhenmin/p/3557046.html
Copyright © 2020-2023  润新知