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

Spring Boot集成Jedis遇类缺失异常求助

Redis配置类依赖缺失导致的ClassNotFoundException问题解决

问题重现

我定义了如下RedisConfig配置类:

@EnableRedisRepositories
public class RedisConfig {
    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        return new JedisConnectionFactory(redisStandaloneConfiguration);
    }
    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(jedisConnectionFactory());
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setEnableTransactionSupport(true);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

构建项目时出现错误:

java: cannot access redis.clients.jedis.JedisPoolConfig
  class file for redis.clients.jedis.JedisPoolConfig not found

尝试移除RedisStandaloneConfiguration,直接返回new JedisConnectionFactory()后,原错误消失,但出现新异常:

Error creating bean with name 'jedisConnectionFactory' defined in class path resource [com/iplbetting/iplbettingtracker/config/RedisConfig.class]: Failed to instantiate [org.springframework.data.redis.connection.jedis.JedisConnectionFactory]: Factory method 'jedisConnectionFactory' threw exception with message: redis/clients/jedis/JedisClientConfig

排查后确定是java.lang.ClassNotFoundException: redis.clients.jedis.JedisClientConfig导致的。我使用spring-boot-starter-data-redis并排除了Lettuce依赖,也曾尝试添加3.x版本的Jedis依赖,但问题仍未解决。以下是我的pom.xml依赖配置:

<properties>
        <java.version>17</java.version>
    </properties>
    <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>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.7.2</version>
        </dependency>-->
    </dependencies>

请问我是否遗漏了某些配置?


解决方案

1. 引入兼容版本的Jedis依赖

问题核心是排除Lettuce后没有正确引入Jedis依赖,且手动指定的3.x版本可能和当前Spring Boot版本不兼容。不要手动指定Jedis版本,让Spring Boot的依赖管理自动匹配兼容版本:

修改pom.xml,取消注释Jedis依赖并移除版本号:

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

2. 修正RedisConfig中的序列化配置错误

你的配置中重复调用了setHashKeySerializer,第二次调用会覆盖第一次的StringRedisSerializer,导致哈希键序列化方式不符合预期,修正如下:

@EnableRedisRepositories
public class RedisConfig {
    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        // 如果需要自定义Redis地址、密码等,在这里配置RedisStandaloneConfiguration
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
        // 示例:config.setHostName("localhost"); config.setPort(6379);
        return new JedisConnectionFactory(config);
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(jedisConnectionFactory());
        
        // 键序列化用StringRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // 哈希键序列化用StringRedisSerializer
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        // 哈希值序列化用JdkSerializationRedisSerializer
        redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
        // 值序列化用JdkSerializationRedisSerializer
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        
        redisTemplate.setEnableTransactionSupport(true);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

3. 可选:简化配置(推荐)

如果不需要自定义Redis连接参数,Spring Boot会自动读取application.properties或application.yml中的配置(如spring.redis.host、spring.redis.port等),可以简化jedisConnectionFactory的配置:

@Bean
public JedisConnectionFactory jedisConnectionFactory() {
    return new JedisConnectionFactory();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 06:43:17