Redisson Spring Boot Starter 依赖冲突:3 步定位版本错配,10 分钟修好启动失败
2026/9/5 22:10:25 网站建设 项目流程

Redisson Spring Boot Starter 依赖冲突:3 步定位版本错配,10 分钟修好启动失败

【免费下载链接】redissonRedisson: Valkey & Redis Java Client and Real-Time Data Platform. Sync/Async/RxJava/Reactive API. Over 50 Valkey and Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Bloom filter, Spring, Tomcat, Scheduler, JCache API, Hibernate, RPC, local cache..项目地址: https://gitcode.com/GitHub_Trending/re/redisson

升级 Spring Boot 后服务起不来,日志满屏 NoClassDefFoundError,堆栈指向 Actuator 的 Endpoint 注解类——这是典型的 Redisson Spring Boot Starter 依赖冲突。这份排障笔记记录从识别症状到修复依赖树的完整路径。

🔍 症状识别:认出 Redisson NoClassDefFoundError 的这几行日志

先别急着动 pom。只有启动日志里出现下面这种报错,才需要按这条路往下查:

java.lang.NoClassDefFoundError: org/springframework/boot/actuate/endpoint/annotation/Endpoint Caused by: java.lang.ClassNotFoundException: org/springframework/boot/actuate/endpoint/annotation/Endpoint

两类相似报错要先排除。堆栈缺的是 Redisson 自己的类(比如 org/redisson/api 下的接口),多半是打包漏了 jar,与版本错配无关;报 RedisConnectionException、连接超时的,是网络或配置问题,改依赖树没有意义。对号入座错方向,会浪费你半天。

📊 根因定位:依赖树排查命令手动查出冲突模块

在项目根目录跑这条命令,看 starter 拉进来的子树:

mvn dependency:tree | grep -E "redisson|spring-boot"

你大概率会看到 starter 下面挂着一个 redisson-spring-data-4x 模块,而你项目的 Spring Boot 还是 2.x 或 3.x。你看到的“starter 版本没问题”,其实意味着“它默认携带的 spring-data 模块是按更新的 Spring Data Redis 编译的”。starter 的 pom.xml 里 import 了最新的 spring-boot-dependencies,默认配套模块只服务最新的 Spring Boot;Actuator 在它内部是 provided + optional 声明,本身并不传递。真正的裂缝在于:你工程里的 Spring 组件与 Redisson 侧 spring-data 模块来自不同大版本,类加载就在这个落差里失败。

📋 修复路线对比:三种改法的适用场景

适用场景改动范围适合谁
Spring Boot 版本偏旧,starter 默认的 spring-data 模块太新pom 里加一段 exclusion,再补一个匹配的 redisson-spring-data 依赖刚发现问题、想快速恢复环境的团队
Netty、Actuator、Data Redis 等多个组件版本互相脱节pom 的 properties 里补一两行版本属性长期维护、CI 统一管理版本的项目
部分环境没有 Redis,或自动配置类是冲突源头排除自动配置类,配置类里手动注册 RedissonClient需要完全掌控初始化过程的多环境部署

🛠️ 主推修法:排除依赖 + 换配 redisson-spring-data 版本

最通用的是换装对应版本:先排除 starter 默认携带的模块,再手动声明与你 Spring Boot 匹配的版本。完整版本对照见 Spring 集成文档,简化如下:

  • Spring Boot 1.3.y / 1.4.y / 1.5.y → redisson-spring-data-16 / -17 / -18
  • Spring Boot 2.x.y → redisson-spring-data-2x(2.7.x 用 -27)
  • Spring Boot 3.x.y → redisson-spring-data-3x(3.0.x 用 -30)
  • Spring Boot 4.x.y → redisson-spring-data-4x(如 -40)

以“Spring Boot 2.7、starter 默认携带 4x 模块”为例,最小可用配置:

<dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>x.x.x</version> <exclusions> <exclusion> <groupId>org.redisson</groupId> <artifactId>redisson-spring-data-41</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-data-27</artifactId> <version>x.x.x</version> </dependency>

两个依赖保持同一个 Redisson 版本号,否则 starter 与 spring-data 模块之间还可能差一个版本。Gradle 的写法类似,语法见官方文档。

另外两种修法各一句话带过:版本锁定走 properties,官方 FAQ 明确说 Netty 冲突时声明<netty.version>属性即可生效;排除自动配置则是在主类上加@EnableAutoConfiguration(exclude = ...),Spring Boot 2.7 以上排 RedissonAutoConfigurationV2、2.6 及以下排 RedissonAutoConfiguration、4.0+ 排 RedissonAutoConfigurationV4,再用Redisson.create(config)自建客户端。

✅ 修复后自检清单:确认版本不兼容已消除

  • 完整重启一次,日志无 NoClassDefFoundError,RedissonClient 与 RedisTemplate 都能注入
  • 重跑依赖树命令,确认 classpath 里只剩一个 redisson-spring-data 版本
  • Redisson 各坐标的版本收敛到同一处声明,下次升级不会漏改
  • 带 Actuator 时其版本与 Spring Boot BOM 一致,健康检查端点能正常返回
  • 换一台干净机器再启动一次,确认不是本地仓库缓存掩盖了问题

如果还叠加了 Spring Session 或 Spring Cache,选版本的逻辑完全一致,直接查 Spring 集成文档。

【免费下载链接】redissonRedisson: Valkey & Redis Java Client and Real-Time Data Platform. Sync/Async/RxJava/Reactive API. Over 50 Valkey and Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Bloom filter, Spring, Tomcat, Scheduler, JCache API, Hibernate, RPC, local cache..项目地址: https://gitcode.com/GitHub_Trending/re/redisson

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询