升级Spring Boot版本至2.4.10后出现ClassNotFoundException: org.springframework.cloud.sleuth.autoconfig.SleuthProperties问题求助
嘿,这个问题我之前帮同事踩过类似的坑,虽然你没直接用Spring Cloud Sleuth,但升级后出现这个错误大概率是依赖间接引入或者自动配置残留导致的,给你几个排查和解决的思路:
1. 排查并排除间接引入的Sleuth依赖
很多时候是项目里的其他Spring Cloud组件(比如Gateway、Config等)间接引入了旧版本的Sleuth依赖,而Spring Cloud 2020.0.0(Ilford版本)已经重构了Sleuth的包结构,导致旧类找不到。
- 如果你用Maven,执行下面的命令找出依赖树中的Sleuth引用:
mvn dependency:tree | grep sleuth - 如果你用Gradle,执行:
./gradlew dependencies | grep sleuth
找到对应的依赖后,在你的pom.xml或build.gradle里排除掉Sleuth相关的模块,比如Maven里这样写:
<dependency> <groupId>某个间接引入的依赖组</groupId> <artifactId>某个间接引入的依赖</artifactId> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </exclusion> </exclusions> </dependency>
2. 禁用Sleuth的自动配置
如果排查不到间接依赖,或者排除后还是报错,可以直接在配置文件中禁用Sleuth的自动配置,避免Spring尝试加载不存在的类:
- 在
application.yml中添加:spring: autoconfigure: exclude: org.springframework.cloud.sleuth.autoconfig.SleuthAutoConfiguration - 或者在
application.properties中添加:spring.autoconfigure.exclude=org.springframework.cloud.sleuth.autoconfig.SleuthAutoConfiguration
3. 检查自定义代码中的隐性引用
还有一种可能是你项目里的自定义注解、配置类或者切面中,不小心引用了SleuthProperties这个类(比如某个注解的属性类型用到了它),这种情况需要全局搜索项目中的这个类名,把相关引用删掉或者替换成适配新版本的类。
4. 升级Spring Cloud到同系列的维护版本
Spring Cloud 2020.0.0是该系列的初始版本,可能存在一些兼容性bug,你可以尝试升级到2020.0.x系列的最新维护版本(比如2020.0.5),它和Spring Boot 2.4.10依然兼容,而且修复了不少依赖相关的问题。
为什么会出现这个错误?
Spring Cloud 2020.0.0对Sleuth的自动配置模块做了重构,旧的org.springframework.cloud.sleuth.autoconfig.SleuthProperties类被移除或者迁移到了新的包路径,但你的项目中某个依赖(直接或间接)还在尝试加载这个旧类,导致启动时抛出ClassNotFoundException。
内容的提问来源于stack exchange,提问作者user16509810

