Spring Boot从2.5.7升级至2.6.1启动报错No ServletContext set求助
问题根因
这个报错是Spring Boot 2.6版本迭代中两处核心改动共同导致的:
- Spring Boot 2.6.0开始默认禁用了循环依赖,同时收紧了Servlet上下文相关Bean的初始化顺序校验,WebMvc相关组件的初始化对ServletContext的就绪状态要求更严格
- 配套的Spring Security 5.6.x版本调整了@EnableWebSecurity注解的配置加载逻辑,当Security配置类不符合加载规范时,会打乱Web相关Bean的初始化顺序,导致resourceHandlerMapping初始化时ServletContext还未完成注入
可直接落地的解决方案
- 检查所有标注@EnableWebSecurity的配置类,确保类上同时添加了@Configuration注解,不要遗漏。若当前项目还在使用已废弃的WebSecurityConfigurerAdapter继承方式编写Security配置,优先替换为组件式的SecurityFilterChain配置,适配2.6.x版本的加载逻辑。
- 不要把自定义WebMvc配置(实现WebMvcConfigurer接口的配置逻辑)和@EnableWebSecurity标注的Security配置写在同一个类中,拆分到两个独立的配置类里避免加载顺序冲突。
- 若项目确实存在循环依赖场景,在application配置文件中添加配置
spring.main.allow-circular-references=true,手动开启循环依赖支持,避免Bean初始化顺序被打乱。 - 检查依赖树,确认所有Spring Web、Spring Security相关依赖的版本都和Spring Boot 2.6.1的依赖管理版本对齐,没有引入低版本的兼容冲突依赖。
内容的提问来源于stack exchange,提问作者ergonaut
相关产品推荐
相关产品推荐

