为什么在使用 Spring Redis 时 JedisConnection 出现 NoClassDefFound 错误

新手上路,请多包涵

您好,当我尝试使用 spring-redis 时,我得到了

java.lang.NoClassDefFoundError: Could not initialize class org.springframework.data.redis.connection.jedis.JedisConnection

使用 redis 进行任何连接操作时出现异常。我的配置方法是这样的

 @Bean
public RedisConnectionFactory jedisConnFactory() {
    JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();

    jedisConnectionFactory.setHostName("XXX.XX.XX.XXX");

    jedisConnectionFactory.setPort(6381);
    jedisConnectionFactory.setUsePool(true);
    jedisConnectionFactory.afterPropertiesSet();
    return jedisConnectionFactory;

请建议是否有人知道我为什么会收到此异常。

原文由 Anand Kadhi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

浪费了将近一天的时间,发现jar已经在我的类路径中,我进一步调试它,发现当java的反射机制试图找到一个已经存在于“方法列表”中的方法时,它无法找到由于 Jedis 版本 (2.7.2) 与 Spring Data Redis (1.5.0.RELEASE) 不兼容的 版本冲突,此问题已在此链接中得到解答:

Jedis和spring data redis版本冲突

原文由 Anand Kadhi 发布,翻译遵循 CC BY-SA 3.0 许可协议

Redis客户端仍然保持旧包结构的最新版本是:2.10.2。

 <dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.10.2</version>
</dependency>

从 3.0.x 开始,包结构发生了变化。如果 spring-data-redis 使用旧的包结构调用 redis 客户端的 Pool 类,则 java.lang.NoClassDefFoundError

似乎是最新 的 spring-data-redis: 2.1.10.RELEASE 仍然调用具有旧包结构的 redis 客户端的 Pool 类,因此您需要使用 redis.clients 2.10.2

原文由 Thang Le 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题