Gorm中 invalid connection 问题的解决

这几天一直遇到一个问题,有一个接口在长时间不访问后总是报 invalid connection错误。
顾名思义,数据库连接是无效的 ,这是因为在长时间不使用后数据库单方面关闭了连接,导致gorm连接数据库的时候使用的连接已经变成无效连接了。

要想解决这个问题那么首先查看数据库的超时时间。
SHOW VARIABLES LIKE '%timeout%';
在这里插入图片描述
可以看到 wait_timeout = 28800 ,也就是8小时,那么一个8小时内没有数据库操作的话,数据库就会关闭连接。

有很多给出修改数据库配置文件的方法,但在我看来不可行。数据库很多时候不能重启,而且也不一定有权限修改。

其实使用以下代码就可以解决了

db.DB().SetConnMaxLifetime(time.Hour*4)      //括号里面是超时时间,要小于数据库的超时时间

设置之后,gorm的连接就会在设置的时长之后销毁,下次连接就会建立新的。

下面的参考有问题,不再引用
参考:https://www.cnblogs.com/already/p/12418816.html
针对上方参考的说明:
MySQL社区版不支持线程池,所以thread_pool_idle_timeout没用。在支持线程池的版本中,根据https://www.cnblogs.com/cchust/p/4510039.html ,线程池是MySQL服务端自己实现的,每个线程可能对应多个连接,所以线程的关闭和连接的关闭是不同的,不会相互影响(开启线程池的情况下)。最终还是要看wait_timeout,不放心可以自己试一下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值