[Redis]java.lang.NoClassDefFoundError: redis/clients/jedis/JedisClientConfig

399 阅读1分钟

在使用 Spring Data Redis 操作 Redis 时,Spring 报出了 java.lang.NoClassDefFoundError: redis/clients/jedis/JedisClientConfig 异常:

@SpringBootTest
public class SpringRedisDemoApplicationTests {
    
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Test
    public void testConnect() {
        ValueOperations<String, Object> operations = redisTemplate.opsForValue();
        operations.set("name", "洛必达");
        String name = (String) operations.get("name");
        System.out.println(name);
    }

}

后来查资料才知道 Spring Boot 从 2.0 开始弃用了 Jedis 作为 Redis 的客户端,而是用了 Lettuce。如果想要使用 Jedis,那么就要导入 Jedis 依赖库,假如还使用了 Jackson 的 JSON 序列化器,那么就要导入 jackson-databind 依赖库:

<dependencies>
    <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>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>