zoukankan      html  css  js  c++  java
  • Spring Boot连接MySQL长时间不连接后报错`com.mysql.cj.core.exceptions.ConnectionIsClosedException: No operations allowed after connection closed.`的解决办法

    报错:com.mysql.cj.core.exceptions.ConnectionIsClosedException: No operations allowed after connection closed.

    添加 &autoReconnect=true 无济于事,此选项好像仅对 MySQL 5之前的版本有效。

    原因

    Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。这就是问题的所在,在C3P0 pools中的connections如果空闲超过8小时,Mysql将其断开,而C3P0并不知道该connection已经失效,如果这时有Client请求connection,C3P0将该失效的Connection提供给Client,将会造成上面的异常。

    解决办法

    http://www.cnblogs.com/hemingwang0902/archive/2012/03/15/2397620.html

    临时解决办法

    因为上面的办法需要修改数据库,但是我不想改数据库。所以:
    修改一下连接MySQL的驱动(修改application.properties):

    spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
    

    改为

    spring.datasource.driverClassName=com.mysql.jdbc.Driver
    

    总结

    使用jdbc原始的驱动应该是每一次查询都新建了一个连接;
    而spring boot推荐的cj的这个驱动应该是先建立了一个连接(池),一直不断开,然后之后的查询都是从这个连接里面进行的,而MySQL在和这个连接连接了几个小时后就会断开这个连接。
    虽然效率上来说cj这个连接池的方式更快。

  • 相关阅读:
    Java 连oracle 12C 起步
    powershell excel 导入 sqlserver
    移动端适配方案(上)
    ie7兼容问题
    node学习第三天(2)
    node学习第三天(1)
    HTMl5的sessionStorage和localStorage的一些区别
    html5+css3实战之-幽灵按钮
    node.js理论知识梳理
    node.js学习第二天
  • 原文地址:https://www.cnblogs.com/zifeiy/p/9282230.html
Copyright © 2011-2022 走看看