MySql配置为删除任何闲置超过8小时的连接。 这意味着什么? 在8个小时的间隔后返回到已部署的应用程序之后(如果未更改默认SQL参数),将会遇到异常情况。
如何解决这个问题?
- 增加wait_time参数-不是一个好主意,它可能不必要地占用了资源,并且不一定是可靠的解决方法。 除此之外,依靠“外部”配置进行故障转移不是一个好主意-如果服务器本身崩溃了,怎么可能在一个实例中丢失了该配置呢?
这种方法会出现问题。 - 将参数autoReconnect = true与JDBC URL一起使用-我的SQl本身不建议这样做,请查看链接,并且人们报告说这样做也不起作用,请参考链接。
- 自定义处理-让您的代码确定连接已丢失,然后恢复它并尝试重新连接,但是这将在代码中带来很多故障转移机制。
- 我发现的最佳方法是将池机制配置为c3p0。 看到这篇文章如何在JPA中为休眠配置c3p0,它简单,简单且可靠。
那么,您如何测试该问题已解决?
- 将MySql中的wait_timeout更改为仅2分钟,这是可以从MySql工作台管理控制台完成的方法
- 保持idleTestPeriod的值小于wait_timeout-快速回顾一下idleTestPeriod的含义
idleTestPeriod: default value=0; If this is a number greater than 0, c3p0 will test all idle, pooled but unchecked-out connections, every this number of seconds
- 在wait_timeout过去之后登录-它不应引发异常
参考: 在几个小时后 ,我们的JCG合作伙伴 Chandan Pandey在“ 软件设计和开发思想”博客上自动 断开了MySql连接 。
翻译自: https://www.javacodegeeks.com/2013/01/mysql-connections-autodrop-after-a-certain-hours.html