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

升级SpringBoot3.0.2+JDK17后RedisTemplate Bean创建失败求助

解决方案:Spring Boot 3.0.2 升级后 RedisTemplate Bean 初始化失败(集群插槽缓存问题)

1. 确保Jedis版本与Spring Boot 3.0.2兼容

Spring Boot 3.x 依赖 Spring Data Redis 3.x,后者要求 Jedis 版本为 4.x+(旧版3.x Jedis与Spring Data Redis 3.x存在兼容性冲突)。

  • 若使用Spring Boot依赖管理,直接引入Jedis无需指定版本:
    dependencies {
        implementation 'redis.clients:jedis'
        implementation 'org.springframework.boot:spring-boot-starter-data-redis'
    }
    
  • 若需手动指定,选择适配版本(如4.3.1,对应Spring Boot 3.0.2):
    implementation 'redis.clients:jedis:4.3.1'
    

2. 修正Redis集群配置与连接工厂代码

Spring Data Redis 3.x 对集群配置的细节要求更严格,检查你的JedisManagerBoot配置类:

  • 确保集群节点格式正确(host:port),并正确设置密码、SSL等参数:
    @Configuration
    public class JedisManagerBoot {
        @Value("${spring.redis.cluster.nodes}")
        private List<String> clusterNodes;
        @Value("${spring.redis.password}")
        private String redisPassword;
    
        @Bean
        public RedisTemplate<String, Object> redisTemplate() {
            RedisTemplate<String, Object> template = new RedisTemplate<>();
            template.setConnectionFactory(jedisConnectionFactory());
            // 按需配置序列化器
            template.setKeySerializer(new StringRedisSerializer());
            template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
            return template;
        }
    
        @Bean
        public JedisConnectionFactory jedisConnectionFactory() {
            RedisClusterConfiguration clusterConfig = new RedisClusterConfiguration(clusterNodes);
            clusterConfig.setPassword(RedisPassword.of(redisPassword));
            // 若集群启用SSL,需添加以下配置
            clusterConfig.setSsl(true);
            return new JedisConnectionFactory(clusterConfig);
        }
    }
    
  • 检查application.properties/application.yml中的集群配置键是否正确,无拼写错误:
    spring.redis.cluster.nodes=redis-node1:6379,redis-node2:6379,redis-node3:6379
    spring.redis.password=your-redis-password
    # 若启用SSL
    spring.redis.ssl=true
    

3. 验证commons-pool2依赖的正确性

确保引入的commons-pool2版本适配Spring Boot 3.x(推荐2.11.x+),无需手动指定版本时直接引入:

implementation 'org.apache.commons:commons-pool2'

若手动指定,使用兼容版本:

implementation 'org.apache.commons:commons-pool2:2.11.1'

4. 清理Gradle缓存并重新构建

依赖缓存冲突可能导致版本不兼容问题,执行以下命令清理缓存后重新构建:

./gradlew clean build --refresh-dependencies

5. 检查Redis集群本身状态

确认Redis集群运行正常,插槽分配完整,无离线节点:
使用redis-cli执行集群检查命令:

redis-cli --cluster check your-redis-host:6379 -a your-redis-password

若集群存在异常(如插槽未分配、节点离线),先修复集群问题再启动应用。

6. 处理Java 17模块化限制(若出现模块相关错误)

若启动时出现NoClassDefFoundError或IllegalAccessError,添加JVM启动参数以开放必要模块:

--add-opens java.base/java.net=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:21:26