springboot redis类型转换异常

java.lang.ClassCastException: com.crazyang.entity.Goods cannot be cast to com.crazyang.entity.Goods

###该错误的引起是由于开发中引入了DevTools进行热部署。
当对象被序列化到缓存里时,当前应用的类加载器是C1,当你改变了一些代码或者配置文件的时候,DevTools 工具将会自动重新启动这个容器,并且创建一个新的类加载器 C2. 这时候调用这个具有缓存的方法时,缓存管理将会从缓存里找到该条缓存记录并进行反序列化操作。如果缓存库不考虑上下文的话,也就是没注意到类加载器的变化时,该对象将会有错误的类加载器(这解释了奇怪的异常)。
其实就是因上下文类加载器不同而产生这样的错误,那么归根结底就是因SpringBoot DevTools工具搞的鬼。

解决方法:在pom.xml中注释掉devtools依赖即可!

Spring Boot 中使用 Redis 插入对象时可能会遇到一些错误,常见的原因有: 1. **数据转换异常**:如果 Redis 需要存储的对象不是 String 型,而 Spring Boot 没有配置相应的序列化策略,如 Jackson 或 JdkSerialization,插入对象时会抛出异常。需要确保在 RedisTemplate 的配置中设置正确的序列化和反序列化策略。 ```java @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); // 添加序列化和反序列化的支持 Jackson2JsonRedisSerializer<Object> jsonSerializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jsonSerializer.setObjectMapper(om); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); template.setKeySerializer(stringRedisSerializer); template.setValueSerializer(jsonSerializer); // 其他配置... return template; } ``` 2. **实体未正确标记为 @RedisHash 或 @RedisObject**:如果你正在尝试将 Java 对象作为 Hash 存储,需要使用 Spring Data Redis 提供的注解,如 `@RedisHash` 和 `@RedisKey`,以便自动序列化和存储。 3. **并发问题**:如果多个线程同时对同一个对象进行操作,可能出现数据竞争导致的异常。确保在操作 Redis 之前获取到合适的锁。 4. **连接问题**:检查 Redis 服务是否运行正常,网络连接是否畅通,Spring Boot 客户端的连接配置是否正确。 当你遇到此错误时,可以按照上述建议排查,查看具体的错误日志信息以确定问题所在。如果还有问题,可以提供具体的错误堆栈或代码片段以便更好地诊断
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值