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

SpringBoot集成Redis Sentinel报UnsatisfiedDependencyException求助

问题定位

你遇到的Bean创建失败级联报错,根因是Jedis版本与Spring Boot 2.6.6内置的Spring Data Redis版本不兼容。
报错链路里最底层的根异常java.lang.NoClassDefFoundError: redis/clients/jedis/GeoUnit是典型的类路径不匹配问题:

  • Spring Boot 2.6.x 官方依赖管理默认适配的Jedis版本范围是3.7.x,这个版本区间内GeoUnit类的路径就是redis.clients.jedis.GeoUnit
  • 你手动引入的Jedis 4.2.2属于大版本跨代升级,Jedis 4.x对内部包结构做了重构,GeoUnit类的存放路径已经变更,Spring Data Redis 2.6.x版本的代码仍然按照3.x的路径加载类,自然触发类找不到错误。

上层抛出的UnsatisfiedDependencyException(localCacheManager、cacheManager、stringRedisTemplate创建失败)都是底层连接工厂初始化失败触发的级联错误,不需要单独排查。

修复方案
  • 调整Maven依赖:删除pom.xml中手动给Jedis指定的4.2.2版本号,直接复用Spring Boot官方依赖管理对齐的适配版本,依赖配置参考:
<!-- 不需要手动指定spring-boot-starter-data-redis版本,和Spring Boot版本保持一致即可 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 不要加<version>标签,由Spring Boot父工程自动管理适配版本 -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

调整后执行mvn clean compile,通过mvn dependency:tree | grep jedis命令确认实际引入的Jedis版本为3.7.x(Spring Boot 2.6.6默认对应3.7.12)即可。

  • 清理配置类冗余注解:把自定义RedisCacheConfig类上的@EnableAutoConfiguration注解移除,这个注解只需要加在项目启动类上,放在普通配置类上容易触发自动配置Bean和自定义Bean的冲突。
  • 可选优化:如果没有特殊定制需求,不需要手动定义JedisConnectionFactory、RedisSentinelConfiguration Bean,只需要在application配置文件中填写sentinel节点、密码、主节点名等参数,Spring Boot会自动完成Sentinel模式的连接工厂装配,避免手动定义Bean时漏配参数导致的额外问题。
  • 如果你必须使用Jedis 4.x版本,需要将Spring Boot版本升级到2.7.x及以上,2.7版本开始的Spring Data Redis才正式适配Jedis 4.x的重构后包结构,2.6.x版本无法兼容Jedis 4.x。
验证逻辑

依赖调整完成后重启服务,底层NoClassDefFoundError异常消失后,上层所有依赖注入失败的级联报错会自动解决,cacheManager、RedisTemplate等Bean会正常初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:27:52