No operations allowed after connection closed
生活随笔
收集整理的這篇文章主要介紹了
No operations allowed after connection closed
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
最近線上的項目出現了一個很奇怪的問題,從開發到上線一直沒有問題,但是今天早上10點左右突然被通知說系統訪問異常,經過排查日志錯誤信息發現了此錯誤:No operations allowed after connection closed。
通過篩查發現是mysql服務端斷開了連接,導致服務連接mysql異常。
問題原因
MySQL5.0以后針對超長時間數據庫連接做了一個處理,即一個數據庫連接在無任何操作情況下過了 8 個小時后(MySQL 服務器默認的超時時間是 8 小時),MySQL 會自動把這個連接關閉。這就是問題的所在,在連接池中的connections如果空閑超過8小時,mysql將其斷開,而連接池自己并不知道該connection已經失效,如果這時有 Client請求connection,連接池將該失效的Connection提供給Client,將會造成上面的異常。
解決方案
配置datasource時需要配置相應的連接池參數,定是去檢查連接的有效性,定時清理無效的連接。
#連接池配置 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配置完成重啟服務即可,問題得到解決。
還有另外的資料說修改服務端連接超時時間
show global variables like 'wait_timeout'; set global wait_timeout=172800;此方法本人未測試,如有同學測試了請告知結果。
總結
出現本次問題的關鍵其實是本人對數據庫連接池知識欠缺及忽略了數據庫連接池的相關配置導致,后面需要惡補其知識,望大家共勉。
總結
以上是生活随笔為你收集整理的No operations allowed after connection closed的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 包含漏洞-读写文件以及执行命令
- 下一篇: 什么是动态评分及规则