解決Springboot使用Redis反序列化遇到的類型轉換異常

轉至:https://chenzhihao.cc/archives/526

異常現(xiàn)象

在使用Springboot 配合 Redis做緩存處理的時候贪嫂,單元測試中對象的序列化和反序列化操作均正常,但是項目Runing后场航,接口操作出現(xiàn)類型轉換異常果港,最可笑的是同一類型轉換出了錯??。

java.lang.ClassCastException: OauthCodeRedisCacheEntity cannot be cast to OauthCodeRedisCacheEntity

image.png

解決思路

第一、我排查了一下單元測試和實際API接口的代碼邏輯是否相同费奸,然而是相同的弥激。

第二、通過Debug模式檢查了一下單元測試和實際API接口對本系統(tǒng)下Redis反序列化方法入參的參數值愿阐,發(fā)現(xiàn)也均值一樣的

第三微服、先后執(zhí)行單元測試和實際API,查看Redis緩存中的數據是否相同缨历,經檢驗也是相同的以蕴。

第四、我考慮到是否是因多線程引起的辛孵,所以對調用該序列化方法的Service層進行了并發(fā)控制丛肮,這里僅加了可重入鎖。然而并沒有成功

第五魄缚、MDZZ宝与,心態(tài)爆炸,歇了一會冶匹,和丫頭說了會話 …. 很開心

第六伴鳖、Google 搜索關鍵詞“Springboot Redis 反序列化類型轉換失敗” …. 未果,看來中文search不行

第七徙硅、Google 直接粘貼報錯信息。 果然搞疗,SF大法好

刨根問底

When you use DevTools with caching, you need to be aware of this limitation.

When the object is serialized into the cache, the application class loader is C1. Then after you change some code/configuration, devtools automatically restart the context and creates a new classloader (C2). When you hit that cache method, the cache abstraction finds an entry in the cache and it deserializes it from the store. If the cache library doesn’t take the context classloader into account, that object will have the wrong classloader attached to it (which explains that weird exception A cannot be cast to A).

上面這段話是Stack Overflow社區(qū)一大佬就此問題的回答嗓蘑,大意是說,當使用SpringBoot 的 DevTools時匿乃,其實該工具是具有緩存效果的桩皿,這點需要注意,而且該大佬也提供的注意事項的連接地址 this limitation.

當對象被序列化到緩存里時幢炸,當前應用的類加載器是C1泄隔,當你改變了一些代碼或者配置文件的時候,DevTools 工具將會自動重新啟動這個容器宛徊,并且創(chuàng)建一個新的類加載器 C2. 這時候調用這個具有緩存的方法時佛嬉,緩存管理將會從緩存里找到該條緩存記錄并進行反序列化操作。如果緩存庫不考慮上下文的話闸天,也就是沒注意到類加載器的變化時暖呕,該對象將會有錯誤的類加載器(這解釋了奇怪的異常)。

其實就是因上下文類加載器不同而產生這樣的錯誤苞氮,那么歸根結底就是因SpringBoot DevTools工具搞的鬼湾揽。

果然,在項目配置初期,為了實現(xiàn)所謂的熱部署和熱加載使用了該工具庫库物,果斷刪掉霸旗。

Perfect!戚揭!

總結

但凡遇到報錯信息诱告,切記不要慌不要亂,有因才有果毫目,可以嚇你根據自己的分析按照自己的想法進行錯誤排查蔬啡,針對出現(xiàn)的類型轉換出現(xiàn)的異常,首先應該想到是不是自己代碼的問題镀虐,因為此次錯誤我在單元測試中是可用的箱蟆,所以業(yè)務代碼層面不會出現(xiàn)問題。

盡量把自己能想到 的解決方式全都用一遍刮便,因為此時你對這個報錯已經有了大題的了解空猜,這個了解僅僅是利用排除法了解到的,即 他不是因為什么什么而發(fā)生恨旱。所以在接下來使用搜索引擎的時候辈毯,可以避免走一些彎路。

自己能想到的解決方法都用了之后搜贤,建議直接Google 報錯信息谆沃,簡單粗暴。逐條查看仪芒,按照說明處理唁影。

當然最重要的還是心態(tài),我在掏空自己的想法之后掂名,果斷選擇去和小迷妹聊會天据沈,解放一下思路,放松一下緊繃的神經饺蔑。當然锌介,在放松之余,我也在想這個問題猾警,只是會更放松孔祸。

總而言之,言而總之肿嘲,所有的程序員們融击,當你寫代碼遇到問題遇到Bug,請找你的女神聊會天v摺W鹄恕匣屡!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拇涤,隨后出現(xiàn)的幾起案子捣作,更是在濱河造成了極大的恐慌,老刑警劉巖鹅士,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件券躁,死亡現(xiàn)場離奇詭異,居然都是意外死亡掉盅,警方通過查閱死者的電腦和手機也拜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趾痘,“玉大人慢哈,你說我怎么就攤上這事∮榔保” “怎么了卵贱?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長侣集。 經常有香客問我键俱,道長,這世上最難降的妖魔是什么世分? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任编振,我火速辦了婚禮,結果婚禮上臭埋,老公的妹妹穿的比我還像新娘党觅。我一直安慰自己,他們只是感情好斋泄,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著镐牺,像睡著了一般炫掐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上睬涧,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天募胃,我揣著相機與錄音,去河邊找鬼畦浓。 笑死痹束,一個胖子當著我的面吹牛,可吹牛的內容都是我干的讶请。 我是一名探鬼主播祷嘶,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屎媳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了论巍?” 一聲冷哼從身側響起烛谊,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘉汰,沒想到半個月后丹禀,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡鞋怀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年双泪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片密似。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡焙矛,死狀恐怖,靈堂內的尸體忽然破棺而出辛友,到底是詐尸還是另有隱情薄扁,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布废累,位于F島的核電站邓梅,受9級特大地震影響,放射性物質發(fā)生泄漏邑滨。R本人自食惡果不足惜日缨,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掖看。 院中可真熱鬧匣距,春花似錦、人聲如沸哎壳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽归榕。三九已至尸红,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刹泄,已是汗流浹背外里。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留特石,地道東北人盅蝗。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像姆蘸,于是被迫代替她去往敵國和親墩莫。 傳聞我的和親對象是個殘疾皇子芙委,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容

  • 前言:學習SpringBoot不應該直接就是開始使用SpringBoot,如果直接拿來用肯定會有很多人不是很明白特...
    CoderZS閱讀 74,788評論 10 217
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)贼穆,斷路器题山,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 今天是反思的第55天顶瞳。誰是對你來說最重要的人?為什么愕秫?你該如何與他們共同成長慨菱?如果他們不愿與你共同成長,你又應該如...
    張嘉賓閱讀 195評論 0 0
  • 冬天 戴甩,騎在風的背上奔來 在我的窗前張望 看著畏懼寒冷的房間 說快打開你的溫暖 輕松的思想總是讓人懶惰和隨意 在正...
    晨中鐘閱讀 450評論 0 1
  • 最近復盤的概念火熱了起來符喝。作為一個重度手帳愛好者(21歲,手帳史8年)甜孤,從三天打魚兩天曬網协饲,到如今的沒有手帳則不能...
    少女冉閱讀 1,662評論 4 43