今天線上突然發現個奇怪的問題項目第一次啟動的時候redis報錯JedisException: Could not return the resource to the pool
直接訪問接口的時候不報錯,訪問頁面的時候報這個錯。而且只有項目重啟的時候才會報這個錯,剛開始以為接口問題,仔細分析頁面原來這個頁面同時加載了好多個接口這些接口都調用了一個方法。而這個方法正好依賴redis。線下自己寫個多線程訪問
問題出現了
getString 方法
getPool方法
問題來了這個getPool不是線程安全的然后又用了一個全局的
所以多線程情況下每個線程獲取的pool都不一樣然后jedis用完了鏈接返回去的pool不一樣導致出現問題。
找到問題了解決很簡單直接在getPool通過雙重校驗鎖可以解決、
或者配置信息可以加載靜態代碼塊。