spring boot 2.6.x启动失败根本原因集中于pom.xml依赖版本错位、webmvcautoconfiguration路径变更、mvc匹配策略切换(ant-path-matcher→path-pattern-matcher)、循环依赖禁用及yaml语法校验严格化,需按序排查父pom版本、依赖树一致性、自动配置类路径、swagger适配配置、循环依赖注入方式与yaml格式。

Spring Boot 2.6.x项目启动失败时,控制台常卡在“Started Application in X.XXX seconds”之前、或直接抛出ClassNotFoundException/BeanCreationException/Failed to start bean等异常,根本原因往往藏在pom.xml依赖树、自动配置迁移变更、或MVC路径匹配策略切换中。
确认Spring Boot 2.6.x核心变更点
第一步:打开项目根目录下的pom.xml,检查<parent></parent>标签中的spring-boot-starter-parent版本号是否确为2.6.5、2.6.13等2.6.x系列——【若仍用2.5.x或2.7.x父POM,自动配置类路径与扫描逻辑将完全错位】。
第二步:执行mvn dependency:tree -Dincludes=org.springframework.boot,重点观察输出中spring-boot-autoconfigure的版本是否与parent声明严格一致;若出现多个版本(如2.5.14混入),说明存在传递依赖污染。
第三步:打开IDEA右侧Maven面板→Lifecycle→双击clean→再双击compile,强制刷新依赖解析缓存。这一步能暴露本地仓库中损坏的jar包(比如spring-boot-autoconfigure-2.6.5.jar大小为0KB)。
排查WebMvcAutoConfiguration类缺失
当报错含java.lang.ClassNotFoundException: org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration时,这不是类真的丢失,而是路径变更未适配:
方法一:检查是否手动在代码中引用了旧包路径。全局搜索import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,将其替换为import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration。
方法二:确认spring-boot-starter-web是否被意外排除。在pom.xml中查找<exclusions></exclusions>块,尤其警惕类似<artifactid>spring-boot-starter-json</artifactid>的排除操作——它可能连带剔除了servlet相关自动配置模块。
方法三:验证IDEA是否启用自动导入。右键pom.xml → “Reload project”,否则Maven依赖变更不会实时同步到编译classpath,导致运行时找不到新路径下的类。
诊断Failed to start bean 'documentationPluginsBootstrapper'
该错误90%由SpringFox 3.0.0与Spring Boot 2.6.x的MVC路径匹配策略冲突引发:
① 打开application.properties,在末尾新增一行:spring.mvc.pathmatch.matching-strategy=ant-path-matcher。
② 立即重启应用。若仍失败,检查是否同时启用了Actuator端点——【此配置对Actuator无效,必须配合方案二】。
③ 在任意@Configuration类中添加以下Bean定义:
@Beanpublic WebMvcRequestHandlerProvider webMvcRequestHandlerProvider( Optional<list>> handlerMappings) {</list> return new WebMvcRequestHandlerProvider(handlerMappings);}
这一步绕过SpringFox内部对PathPatternParser的硬编码依赖,强制使用AntPathMatcher实例。
定位循环依赖导致的BeanCurrentlyInCreationException
Spring Boot 2.6默认禁用循环依赖检测,但若项目显式配置了spring.main.allow-circular-references=false(或未设为true),则构造器注入场景下会直接抛出异常:
第一步:在application.properties中添加spring.main.allow-circular-references=true,保存后重启。
第二步:若问题依旧,打开报错堆栈最底部的Caused by:行,找到具体循环链路(如A → B → C → A)。此时不要急于加@Lazy,先检查是否所有Bean都用了构造器注入——【Setter或字段注入可被三级缓存化解,构造器注入无法解环】。
第三步:对链路中最末端的Bean(如C类),将其依赖项改为ObjectProvider<x></x>或Provider<x></x>,实现延迟获取而非启动时强绑定。
验证YAML配置语法与占位符解析
Spring Boot 2.6对application.yml的解析更严格,缩进错误或未闭合引号会导致ApplicationContext初始化中断:
打开application.yml,用IDEA右上角“Check YAML syntax”按钮执行校验。重点关注报错行附近的冒号后空格、Tab字符、以及${xxx}占位符是否在pom.xml的<properties></properties>中正确定义。
临时将application.yml重命名为application.yml.bak,启动应用。若此时成功,则100%确认是YAML格式问题——逐段取消注释并重启,定位到具体出错段落。











