部署后的项目,第二天发现其中的一个mysql连接数据源没有显示,打开日志后发现报错了(No operations allowed after connection closed) ,经过一番摆渡,发现是因为MySQL5及更新的版本会对超过8小时并且无任何操作的数据库连接进行关闭,但是你得数据库连接池并不知道此连接已失效,当你再次访问的时候,连接池就奉上此失效连接,so Exception.
关于解决此问题的方法,我做了以下两种尝试:
- url后加上autoReconnect=true
这个方法我试用了,发现可以(看网上说官网不推荐这种解决方式,说是会出现 事务状态混淆),但我看官网上在5.1.45版本中专门对此问题做出了修复, 具体的大家可以测试测试

- 数据库连接配置信息中加入
validation-query:SELECT 1 (验证数据库连接的有效性)
time-between-eviction-runs-millis:18800 (空闲连接回收的时间间隔)
注: 个人观点 仅供参考!!!

本文探讨了MySQL5及以上版本对长时间未操作的连接自动关闭的问题,并提供了两种解决方案:通过url参数设置autoReconnect=true实现自动重连,以及在数据库连接配置中加入validation-query和time-between-eviction-runs-millis参数来定期验证和回收空闲连接。
19

被折叠的 条评论
为什么被折叠?



