为什么在使用Spring Redis时,JedisConnection会获得NoClassDefFound错误

2022-09-02 05:03:42

你好,当试图使用春天的红,我得到

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;

如果有人知道为什么我得到这个例外,请建议。


答案 1

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


答案 2

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


推荐