SpringBoot mysql 异常:No operations allowed after connection closed.
前提:
1. db mysql
2. 使用的hibernate 连接池
如果前提不符,那么解决方案或许也不适用
这个问题,老生常谈了,
原因为连接池使用无效的连接去访问DB
无效的原因为:mysql超时后主动关闭连接,但是连接池并不会主动清理失效的连接,所以还是会存在使用无效连接去访问DB的情况
所以新增配置:
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5
spring.datasource.validation-query=SELECT 1
spring.datasource.test-on-borrow=false
spring.datasource.test-while-idle=true
spring.datasource.time-between-eviction-runs-millis=18800
参数说明:
max-idle:连接池中的最大空闲连接数
max-wait:连接池在等待返回连接时,最长等待多少毫秒再抛出异常
min-idle:连接池里始终应该保持的最小连接数
initial-size:连接池启动时要建立的连接数
validation-query:连接池里的连接返回给调用者或连接池时,要执行的验证的SQL
test-on-borrow:从连接池中借用连接时是否要进行测试
test-while-idle:连接空闲时是否要进行测试
time-between-eviction-runs-millis:在两次空闲连接验证、弃用连接清理和空闲池大小调整之间睡眠的毫秒数
另外:
查询mysql的wait_timeout:
show global variables like '%timeout';
查看 mysql服务器的所有用户的连接(前提为root)
show processlist;(前100条)
show full processlist;(全部)
study:
1. idle:
the devil makes work for idle hands
(saying) 人闲生是非(习语)
2. wait:
Wait for me!
3. initial:
Just write your initials.
写下你的姓名首字母即可。
4. validation:
To test, analyze and validate business logic.
测试、分析并验证业务逻辑。
5. eviction:
He claimed damages for unlawful eviction.
他要求对非法驱逐作出赔偿。
6. millisecond(millis):
(technical 术语) 毫秒;千分之一秒
a 1000th of a second