Mysql 8小时问题

最近做的一个web项目,上线之后,第二天访问总是访问不到,数据库连接失败,重启jetty之后就没事了。


查询原因:原来是DB链接失效,mysql 的数据库有一个全局变量,设定数据库链接有效期限的,默认为8小时。如果超过这个时间,一直没有访问数据库的话,mysql会自动将其失效。


解决方法:(1)可以修改mysql DB的全局参数,不建议采用

(2)修改配置参数。

在数据库连接的配置文件中加上以下参数:

validationQuery=SELECT 1  
testWhileIdle=true    
timeBetweenEvictionRunsMillis=3600000 
minEvictableIdleTimeMillis=18000000
testOnBorrow=true


参数意义:

通过设置validationQuery,连接池在返回数据库连接给申请者时会多执行一条sql语句来确保该连接的有效性。如果数据库方已经关闭了,连接池会重新建立连接并返回给申请者。通过测试似乎跟testWhileIdle没有关系,不管其是true或false都正常工作。

通过配置timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis,每过 timeBetweenEvictionRunsMillis毫秒Evictor会调用evict()方法,检查连接池中的连接的闲置时间是否大于 minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0时则忽略,默认为30分钟),是则销毁此对象,然后调用ensureMinIdle方法检查确保池中对象个数不小于_minIdle。如果连接池的连接数小于最小空闲连接数,则创建数据库连接,同时检查连接池的连接是否小于maxIdle,是则把刚创建的连接放入连接池中,否则销毁此对象。

testOnBorrow true 指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个.




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值