Spring cache 加 devtool热加载的小坑

在使用Spring Boot的Spring Cache时,如果引入了devtools,可能会遇到ClassCastException。原因是devtools使用了两个不同的类加载器。解决办法是需要在创建Serializer时指定类加载器,以确保与restart class loader加载的类型匹配,避免类转换异常。
摘要由CSDN通过智能技术生成

错误:

异常:

Java.lang.ClassCastException

原因:

maven引入了 spring-boot-devtools。类加载器不同导致的问题。

解决方案:

https://github.com/spring-projects/spring-boot/issues/9444

手动设置类加载器

As explained in the documentation that I linked to above, DevTools uses two separate ClassLoaders: the app class loader and a restart class loader. The classes in your application (rediscache module) are loaded by the restart class loader so that they can be quickly reloaded as you make changes.

In your RedisCache class, you're creating a JdkSerializationRedisSerializer without specifying a ClassLoader. As a result, it uses the app class loader. This means that you end up with a User loaded by the app class loader being cast to the User type loaded by the restart class loader.

To fix the problem you need to specify a class loader when you create the serializer. For example:

RedisSerializer<Object> serializer = new JdkSerializationRedisSerializer(getClass().getClassLoader());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值