解决Springboot使用Redis反序列化遇到的类型转换异常

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

异常现象

在使用Springboot 配合 Redis做缓存处理的时候,单元测试中对象的序列化和反序列化操作均正常,但是项目Runing后,接口操作出现类型转换异常,最可笑的是同一类型转换出了错😄。

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

image.png

解决思路

第一、我排查了一下单元测试和实际API接口的代码逻辑是否相同,然而是相同的。

第二、通过Debug模式检查了一下单元测试和实际API接口对本系统下Redis反序列化方法入参的参数值,发现也均值一样的

第三、先后执行单元测试和实际API,查看Redis缓存中的数据是否相同,经检验也是相同的。

第四、我考虑到是否是因多线程引起的,所以对调用该序列化方法的Service层进行了并发控制,这里仅加了可重入锁。然而并没有成功

第五、MDZZ,心态爆炸,歇了一会,和丫头说了会话 …. 很开心

第六、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社区一大佬就此问题的回答,大意是说,当使用SpringBoot 的 DevTools时,其实该工具是具有缓存效果的,这点需要注意,而且该大佬也提供的注意事项的连接地址 this limitation.

当对象被序列化到缓存里时,当前应用的类加载器是C1,当你改变了一些代码或者配置文件的时候,DevTools 工具将会自动重新启动这个容器,并且创建一个新的类加载器 C2. 这时候调用这个具有缓存的方法时,缓存管理将会从缓存里找到该条缓存记录并进行反序列化操作。如果缓存库不考虑上下文的话,也就是没注意到类加载器的变化时,该对象将会有错误的类加载器(这解释了奇怪的异常)。

其实就是因上下文类加载器不同而产生这样的错误,那么归根结底就是因SpringBoot DevTools工具搞的鬼。

果然,在项目配置初期,为了实现所谓的热部署和热加载使用了该工具库,果断删掉。

Perfect!!

总结

但凡遇到报错信息,切记不要慌不要乱,有因才有果,可以吓你根据自己的分析按照自己的想法进行错误排查,针对出现的类型转换出现的异常,首先应该想到是不是自己代码的问题,因为此次错误我在单元测试中是可用的,所以业务代码层面不会出现问题。

尽量把自己能想到 的解决方式全都用一遍,因为此时你对这个报错已经有了大题的了解,这个了解仅仅是利用排除法了解到的,即 他不是因为什么什么而发生。所以在接下来使用搜索引擎的时候,可以避免走一些弯路。

自己能想到的解决方法都用了之后,建议直接Google 报错信息,简单粗暴。逐条查看,按照说明处理。

当然最重要的还是心态,我在掏空自己的想法之后,果断选择去和小迷妹聊会天,解放一下思路,放松一下紧绷的神经。当然,在放松之余,我也在想这个问题,只是会更放松。

总而言之,言而总之,所有的程序员们,当你写代码遇到问题遇到Bug,请找你的女神聊会天!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • 前言:学习SpringBoot不应该直接就是开始使用SpringBoot,如果直接拿来用肯定会有很多人不是很明白特...
    CoderZS阅读 74,776评论 10 217
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 今天是反思的第55天。谁是对你来说最重要的人?为什么?你该如何与他们共同成长?如果他们不愿与你共同成长,你又应该如...
    張嘉宾阅读 194评论 0 0
  • 冬天 ,骑在风的背上奔来 在我的窗前张望 看着畏惧寒冷的房间 说快打开你的温暖 轻松的思想总是让人懒惰和随意 在正...
    晨中钟阅读 447评论 0 1
  • 最近复盘的概念火热了起来。作为一个重度手帐爱好者(21岁,手帐史8年),从三天打鱼两天晒网,到如今的没有手帐则不能...
    少女冉阅读 1,654评论 4 43