Spring Boot 2.6.4服务如何兼容接入2.1.4版本AOP服务
Spring Boot 2.6.4兼容接入2.1.4.RELEASE版本AOP服务报错解决方案
问题根因
这个报错是跨大版本依赖冲突导致的类缺失:
org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata是Spring Boot 2.3及更早版本的内置类,2.4版本开始被官方彻底移除,相关能力由新的配置绑定API承接- 引入的2.1.4版本creez-aop-service传递依赖了适配Spring Boot 2.1.x的旧版Spring Cloud Greenwich版本线组件,其中
ConfigurationPropertiesRebinderAutoConfiguration自动配置类硬依赖了上述被删除的类,服务启动时扫描到这个旧自动配置就会抛出类找不到异常 - 日志AOP核心能力本身不会用到Spring Cloud的配置刷新、配置重绑定能力,这个冲突完全是传递依赖带进来的冗余组件导致的。
解决方案
方案1:排除冗余的旧版Spring Cloud传递依赖(优先推荐)
在主服务(creez-main-service)里引入creez-aop-service依赖时,直接把它带进来的旧版Spring Cloud相关依赖全部排除,不会影响AOP核心功能。
Maven配置参考:
<dependency> <groupId>替换为creez-aop-service实际的groupId</groupId> <artifactId>creez-aop-service</artifactId> <version>2.1.4.RELEASE</version> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-context</artifactId> </exclusion> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-commons</artifactId> </exclusion> </exclusions> </dependency>
Gradle配置参考:
implementation('替换为creez-aop-service实际的groupId:creez-aop-service:2.1.4.RELEASE') { exclude group: 'org.springframework.cloud', module: 'spring-cloud-context' exclude group: 'org.springframework.cloud', module: 'spring-cloud-commons' }
排除完可以执行依赖检查命令,确认没有低版本Spring Cloud、Spring Boot的残留依赖:
- Maven:
mvn dependency:tree | grep spring-cloud - Gradle:
./gradlew dependencies | grep spring-cloud
如果主服务本身需要使用Spring Cloud能力,直接引入Spring Boot 2.6.4官方对齐的Spring Cloud 2021.0.x版本依赖即可,不会和AOP服务产生冲突。
方案2:禁用触发报错的自动配置
如果排除依赖后还有其他旧自动配置报类似的类不存在错误,可以直接在启动类上禁用掉不需要的旧自动配置:
@SpringBootApplication(exclude = { // 禁用旧版Spring Cloud配置重绑定自动配置 org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration.class }) public class CreezMainApplication { public static void main(String[] args) { SpringApplication.run(CreezMainApplication.class, args); } }
后续启动时如果遇到其他旧自动配置报类找不到错误,按同样格式加到exclude列表里即可,不会影响AOP日志切面的核心能力。
方案3:临时补全缺失类(仅应急使用,不推荐长期留存)
如果前两种方案因为特殊原因没法落地,可以在主服务里新建和缺失类完全同包名、同类名的空实现,临时骗过类加载检查:
package org.springframework.boot.context.properties; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; /** * 临时兼容类,解决旧版AOP服务依赖的类在新版Spring Boot中不存在的问题 * 后续creez-aop-service升级到适配2.6.x版本后必须删除 */ public class ConfigurationBeanFactoryMetadata implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) { // 无实际逻辑,仅做类存在性兼容 } }
注意:这个方案是临时兜底用的,长期留着可能在后续Spring Boot版本升级时引发隐性兼容bug,能走前两个方案就不要用这个。
校验方式
改完配置后先启动服务,确认没有类找不到的报错,再调用几个带日志切面的接口,确认请求参数、响应结果、耗时这些日志都能正常打印,就说明兼容成功。
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

