admin管理员组

文章数量:1530838

我们在springboot项目中使用默认的连接池时,有时过一段时间不使用数据库,再次查询数据库时会报错,显示连接池中的连接不可用。具体就是报Possibly consider using a shorter maxLifetime value.
我找了很多资料,大多数都是坑,或者讲的不详细。所以本人也是进了不少坑才找到问题所在,这里详细记录一下,供大家参考,也是给自己做个笔记。
先说一下为什么会出现这种错误,首先就是连接池中的连接不可用了,导致我们使用连接的时候去连接池中取连接,拿到的是已经关闭的连接。
为什么会出现这种情况,这里涉及到三个时间,一个是maxLifetime和idleTimeout还有一个是wait_timeout
maxLifetime表示池中连接的最长生命周期默认值是1800000毫秒,也就是30分钟,0的话表示连接永远存活,如果不等于0且小于30秒则会被重置回30分钟,是我们需要在程序里配置的。

idleTimeout表示空闲连接存活的最长时间,默认时间600000毫秒,也就是10分钟如果idleTimeout+1秒>maxLifetime 且 maxLifetime>0,则会被重置为0(代表永远不会退出);如果idleTimeout!=0且小于10秒,则会被重置为10秒

wait_timeout是mysql数据库空闲连接的关闭时间,默认是28800秒,注意上面的单位是毫秒这里是秒,也就是8小时。一般我们需要自己改一下这个时间,如果这个时间是8小时,那么如果我们数据库访问量很大,可能就会产生很多空闲连接不关闭,导致连接耗尽,本人曾经遇到过这个问题。修改的方法就是到配置文件里加上wait_tim

本文标签: PossiblySpringBootmaxLifetimeshorter