mysql长时间断开报错 spring_Spring Boot连接MySQL长时间不连接后报错`com.mysql.cj.core.exceptions.Con

论坛 期权论坛 期权     
已经匿名di用户   2022-4-13 16:44   16463   0

报错: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,将会造成上面的异常。

解决办法

临时解决办法

因为上面的办法需要修改数据库,但是我不想改数据库。所以:

修改一下连接MySQL的驱动(修改application.properties):

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

改为

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

总结

使用jdbc原始的驱动应该是每一次查询都新建了一个连接;

而spring boot推荐的cj的这个驱动应该是先建立了一个连接(池),一直不断开,然后之后的查询都是从这个连接里面进行的,而MySQL在和这个连接连接了几个小时后就会断开这个连接。

虽然效率上来说cj这个连接池的方式更快。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP