为什么在使用Spring Redis时收到JedisConnection的NoClassDefFound错误

Ana*_*dhi 8 java spring redis

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

java.lang.NoClassDefFoundError: Could not initialize class org.springframework.data.redis.connection.jedis.JedisConnection
Run Code Online (Sandbox Code Playgroud)

使用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;
Run Code Online (Sandbox Code Playgroud)

请提出建议,如果有人知道我为什么收到此例外。

Tha*_* Le 14

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

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.10.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

从 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


Sau*_*age 12

就我而言,我必须删除版本标签

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.2.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

 <dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
 </dependency>
Run Code Online (Sandbox Code Playgroud)


Ana*_*dhi 9

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


Cem*_*soy 6

最新版本的Redis客户端解决了我的问题。

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.6.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)


Sac*_*har 5

当我们使用Jedis配置时,需要JedisPoolConfig。在Spring Boot 2.0中,默认情况下spring-boot-starter-data-redis赋予Lettuce依赖关系,而不是Jedis。要使用Jedis配置,请排除莴苣并按以下方式添加Jedis。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>            
</dependency>        
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)