环境
- spring-boot: 2.1.18.RELEASE
- spring-boot-starter-data-redis: 2.1.18.RELEASE
- spring-data-redis: 2.1.21.RELEASE
- jedis: 3.2.0
现象及解决方式
新项目中将redis的驱动换为jedis,使用了3.2.0版本,在本地编译时没有问题。但是在启动时会报错。

尝试了升级jedis仍然不管用,发现即使有SafeEncoder类但是仍然提示找不到。偶然间发现类型相同,但是类路径不同。
将报错的类路径redis.clients.util.SafeEncoder在搜索引擎里搜索了下,发现该路径是jedis的2.9.0版本中的。

因此将版本降级为2.9.0后,项目成功启动起来。
升级
另外,也可以通过升级spring-boot版本的形式将spring-data-redis的版本一并升级。
我将spring-boot升级为了2.2.13.RELEASE,相应的spring-data-redis版本升级为了2.3.7.RELEASE,这样也可以解决SafeEncoder找不到的问题。
分析
主要就是因为spring-data-redis包中的org.springframework.data.redis.connection.jedis.JedisConverters类对jedis的依赖版本不同 ,导致jar包中引入的类路径也不同。
- 在
spring-data-redis的2.3.7.RELEASE版本中是引入的import redis.clients.jedis.util.SafeEncoder; - 在
spring-data-redis的2.1.18.RELEASE版本中是引入的import redis.clients.util.SafeEncoder;
版权声明:本文由 followtry 在 2021年09月27日发表。本文采用CC BY-NC-SA 4.0许可协议,非商业转载请注明出处,不得用于商业目的。
文章题目及链接:《jedis的redis/clients/util/SafeEncoder找不到》