报错
Factory method 'redisConnectionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: redis/clients/jedis/util/Pool
已整合jar包和编写配置类后,在测试类中测试报错:java.lang.NoClassDefFoundError: redis/clients/jedis/util/Pool
一般来说该种错误都是因为缺少相关jar包,或者是相关的class在运行过程中没有被检测到才会弹出
解决思路
首先也是先参照别人的代码进行整合测试,所以事先考虑到整合过程中可能会出现版本问题,经过查询后,发现Spring Data Redis
和Jedis
之间的确存在版本的对应问题。
然而百度发现一大堆都是复制粘贴 :),然后StackOverflow找到一个相关回答:https://stackoverflow.com/questions/55183019/redis-session-with-java-spring-boot
好了,我现在确定是版本之间的兼容问题了,再观察我模仿的项目pom文件:
image.png
image.png
很明显在spring boot的版本上不一致,再结合StackOverflow上看到的版本对应,则应该存在 spring boot 2.1.x -> jedis 2.9.x 的关系,而且spring boot data的版本是跟随着spring boot更新的,所以版本的冲突问题出现在这里。我自己的spring boot版本是2.2.x,故spring boot data 的版本也是如此,所以我选择导入jedis的最新版本3.2.0
,毫无意外成功运行。
解决方法
spring-data-redis和jedis之间存在版本对应关系,在spring-data-redis的官方文档中有(然而我没找到),经过查看前人的解决方法和自己的解决方式,得出如下结论:
spring-data-redis版本 | jedis版本 |
---|---|
2.1.x | 2.9.x |
2.2.x | 3.x |
如果最后还报同样的错误,可以先观察一下自己的版本,选择升高或者降低jedis的版本。
网友评论