升级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
相关产品推荐
相关产品推荐

