問題描述
上上個周測試的時候突然報系統異常,於是我立即查看日志,發現是一個數據庫異常:java.sql.SQLException: connection holder is null
我第一想到的就是可能是那種概率很小的突發事件,然后就和測試說沒關系只是數據庫連接異常以后應該沒事,然后項目因為更新重啟后也沒有什么問題,直到第二天有一次出現這個問題,這時候我才意識到這個不是突發事件。肯定是系統問題。
解決方案
- 發現問題后開始去網上找,結果發現是druid連接池的問題,而網上好多對於這種問題的解決方案都是修改配置文件,但是我去看配置文件無需修改,然后去各種查找依然沒有找到,然后當天只能靠重啟解決問題。第三天繼續查找問題,還是無果,但是晚上回去分析問題,以前都沒有出現過這個問題怎么突然出現了這個問題,初步判斷應該是最近更新代碼的問題,於是第二天上午,將新合並的代碼挨個重新檢查一遍,真的發現一個問題是,其他同事使用編程式事務失敗的時候沒有回滾,其實這個問題早就應該想到了,出現這個問題的同時還有測試反應更新的數據多次查詢一直在變化,其實這個就是事務沒有提交的問題,在之前的公司我遇到過這樣的問題,不過這個問題修改數據的時候都會報一個鎖等待超時錯誤,結果我並沒有找到這個錯誤,所以當時也沒有朝這個方向去想。
- 當發現可能是事務未提交造成的問題,我也模擬一下,但是都是產生的鎖等待超時問題,但是修改正確以后測試了一個周都沒有在出現那個問題,可以確定是由於事務問題造成的。
反思總結
- 這個問題也可以發現自己好多的問題,從發現問題開始並沒有進行細致的思考,想當然的定義問題
- 在該問題過程中對待一些伴隨出現的問題視而不見,沒有將其聯系到一起去考慮分析問題
- 目前還沒有具備分析源碼的能力。導致出現框架問題只能去猜,去看別人如何解決。