You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.7.12应用出现JedisClientConfig的NoClassDefFoundError错误求助

Spring Boot 2.7.12整合Redis启动报错java.lang.NoClassDefFoundError问题

错误栈信息

Cannot resolve reference to bean 'redisKeyValueTemplate' while setting bean property 'keyValueOperations'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redisKeyValueTemplate': Cannot resolve reference to bean 'redisKeyValueAdapter' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redisKeyValueAdapter': Cannot resolve reference to bean 'redisTemplate' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redisTemplate' defined in class path resource [ru/axothy/backdammon/registration/config/RedisConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.redis.core.RedisTemplate]: Factory method 'redisTemplate' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jedisConnectionFactory' defined in class path resource [ru/axothy/backdammon/registration/config/RedisConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.redis.connection.jedis.JedisConnectionFactory]: Factory method 'jedisConnectionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: redis/clients/jedis/JedisClientConfig

RedisConfig配置类代码

@Configuration
public class RedisConfig {

    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        JedisConnectionFactory jedisConFactory = new JedisConnectionFactory();
        jedisConFactory.setHostName("127.0.0.1");
        jedisConFactory.setPort(6379);
        return jedisConFactory;
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(jedisConnectionFactory());
        return template;
    }
}

build.gradle配置

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.12'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

group = 'ru.axothy.backdammon'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '17'
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}
	ext {
    set('springCloudVersion', "2021.0.7")
}

dependencies {
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.cloud:spring-cloud-starter-config'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'

    implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-bootstrap', version: '3.1.6'
    annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
    implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-netflix-eureka-client', version: '3.1.6'

    implementation group: 'org.keycloak', name: 'keycloak-admin-client', version: '21.1.1'

    implementation group: 'org.glassfish.jersey.containers', name: 'jersey-container-servlet-core', version: '3.1.2'
    implementation group: 'org.glassfish.jersey.core', name: 'jersey-server', version: '3.1.2'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

tasks.named('test') {
    useJUnitPlatform()
}

问题描述

开发Spring Boot 2.7.12版本应用,通过Spring Data Redis访问Redis服务,启动时出现上述NoClassDefFoundError错误。已尝试移除build.gradle中的jedis依赖,但问题未解决,请问哪里操作出错了?


问题原因与解决方案

核心原因

NoClassDefFoundError: redis/clients/jedis/JedisClientConfig说明项目运行时缺少Jedis客户端核心类。spring-boot-starter-data-redis默认使用Lettuce作为Redis客户端,而非Jedis;你手动配置了JedisConnectionFactory,但未引入Jedis依赖包,导致类找不到。

解决方案(二选一即可)

方案1:改用Lettuce连接工厂(推荐,符合Spring Boot默认配置)

修改RedisConfig类,替换为Lettuce连接工厂,无需额外引入依赖:

@Configuration
public class RedisConfig {

    @Bean
    LettuceConnectionFactory lettuceConnectionFactory() {
        LettuceConnectionFactory lettuceConFactory = new LettuceConnectionFactory();
        lettuceConFactory.setHostName("127.0.0.1");
        lettuceConFactory.setPort(6379);
        return lettuceConFactory;
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(lettuceConnectionFactory());
        // 建议添加序列化配置,避免默认JDK序列化的问题
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

方案2:添加Jedis依赖包

若坚持使用Jedis,需在build.gradle的dependencies中明确引入Jedis依赖,并排除默认的Lettuce依赖:

implementation('org.springframework.boot:spring-boot-starter-data-redis') {
    exclude group: 'io.lettuce', module: 'lettuce-core'
}
implementation 'redis.clients:jedis' // Spring Boot 2.7.x会自动适配对应版本,无需手动指定

额外注意点

你当前的JedisConnectionFactory初始化方式已过时,新版Jedis推荐通过RedisStandaloneConfiguration配置:

@Bean
JedisConnectionFactory jedisConnectionFactory() {
    RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("127.0.0.1", 6379);
    return new JedisConnectionFactory(config);
}

内容的提问来源于stack exchange,提问作者Ferich1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:32:02