Spring Boot从1.5.3.RELEASE升级至2.2.7.RELEASE后运行异常求助
问题排查与解决方案
1. Spring Boot 2.2.7版本CommandLineRunner不执行问题
- 修复依赖版本冲突:你当前pom中的
spring-jms依赖固定为4.3.5.RELEASE,这是Spring Framework 4.x版本的组件,而Spring Boot 2.2.7.RELEASE对应Spring Framework 5.2.x版本,跨大版本的依赖冲突会导致Spring上下文初始化异常,部分Bean无法正常注册。移除spring-jms的固定版本号,由Spring Boot父依赖统一管理版本即可。 - 移除重复依赖:pom中重复声明了两次
spring-boot-starter-web,删除其中一条避免不必要的依赖冲突。 - 调整启动类冗余配置:
@SpringBootApplication注解本身已经包含@ComponentScan的功能,启动类上重复声明的@ComponentScan(basePackages = "com.company")可以直接移除,避免扫描规则冲突。 - 确认应用类型配置:如果你当前应用不需要web服务,取消
// .web(WebApplicationType.NONE)的注释,显式指定应用为非web类型,避免web容器启动后挂起导致你误认为CommandLineRunner没有执行。 - 排查Bean注册情况:可以在启动类的run方法执行前添加调试日志,或者开启Spring Bean的debug日志,确认
Orchestration类是否被正常注册到Spring容器中。
2. Spring Boot 2.5.5版本类找不到异常问题
该异常的根本原因是依赖版本不兼容:
- Spring Boot 2.5.5对应Spring Framework 5.3.x版本,而你固定了
spring-jms为4.3.5.RELEASE,会强制拉低Spring Core等核心组件的版本到4.3.5,而Spring Boot 2.5.5的SpringApplication类依赖Spring 5.3.x新增的org.springframework.core.metrics.ApplicationStartup类,低版本Spring Core中不存在这个类,因此抛出类找不到异常。 - 修复方法同样是移除
spring-jms的固定版本号,如果你没有引入Spring Boot父依赖管理,需要手动将spring-jms的版本调整为和Spring Boot 2.5.5匹配的Spring Framework版本,避免版本冲突。
内容的提问来源于stack exchange,提问作者Frederick Haug
相关产品推荐
相关产品推荐

