图片中connection后面是Connection com.mysql.jdbc.JDBC4Connection@262026fc failed default system-table Connection test with an Exception!
这是在本地跑程序的时候出现的数据库连接池问题,因为我是定时在微博上抓取一些数据,所以用了定时器,
@Scheduled(initialDelay = 1000*300, fixedRate = 1000 * 300)
然后程序刚开始还是很正常的,但是过了一段时间就出现上图的错误,但是还是能接着定时访问,请问一下为什么会出现这样的错误,还有就是出现这样的,后面影响不影响程序的进行
<p>MySQL端自动把连接池的连接给关了吧。</p>
刚才我在网上搜了一下说是,mysql中的wait_timeout连接超过一定的时间将会关闭,是这个原因吗?但是我的程序也就跑了一会呀,wait_timeout默认不是八小时吗
那该如何处理呢
<p>你查一下数据库的wait_timeout参数,看是多少。这个参数是可以修改的,没准有人改了呢!</p>
解决办法两个,一个是缩小你的数据库连接生存周期,早点回收(
maxIdleTime
)。另一个是定时跑一个激活SQL,让数据库连接永远活着。这两个办法网上的解决说明很多。
回复 <a class="referer" target="_blank">@Andyagg</a> : 因为连接池是连接池,数据库是数据库。数据库销毁了,但没有通知连接池。在这里,数据库是单方面操作,连接池不知道也没法知道。
回复 <a class="referer" target="_blank">@魔力猫</a> : 我刚才一直在思考你说的数据库连接池提供的连接是随机的,有用过的有启动后一直没用过的,那个一直没用的失效的为什么数据库不把他给销毁掉还要提供,如果这样的话,那岂不是连接池中一直存在失效的,然后随机提供给使用者,还会出错呀
回复 <a class="referer" target="_blank">@魔力猫</a> : 嗯嗯,多谢,这样说的话,就理解了,那我的wait_timeout=86400(24小时),maxIdleTime=119,我估计很可能就是119这里出问题了,因为我的定时时间是五分钟,大于空余时间
回复 <a class="referer" target="_blank">@Andyagg</a> : 数据库连接池提供给你的连接是随机的。也许是之前用过的,也许是程序启动后从来没有用过的。刚启动的时候,肯定都是有效的。但是如果有某个一直没用,失效了,却在后来被提供给你,就报错了。
嗯嗯。多谢 我试试你说的办法,但是现在我有些疑问,就是说我的程序是跑的过程中才出现的异常,(即操作过几次数据库了),定时任务是每隔五分钟,按说这样的话,不应该出现mysql自动断开吧,因为前面几次操作数据库都能正常操作呀,如果说是wait_timeout参数的话,前面几次正常的操作是怎么回事呢?还有就是接下来程序还能继续跑,这个是什么情况
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。