升级Spring Boot 2.0.0.RC2遇No ServletContext set异常求助
解决Spring Boot 2.0.0.RC2升级中的
No ServletContext set异常 我之前升级到这个版本时也踩过一模一样的坑,折腾了好一阵才调试出问题根源,给你详细拆解下:
升级Spring Boot到2.0.0.RC2版本时,抛出
No ServletContext set异常
问题根源
经过断点跟踪Spring上下文的加载流程,发现核心问题是MVC配置类EnableWebMvcConfiguration加载时机过早——在Servlet容器还没完成初始化、ServletContext还没被注入到Spring上下文的时候,这个配置类就开始初始化依赖ServletContext的组件,自然就会触发找不到ServletContext的异常。
可行的解决方案
- 避免手动提前触发Web MVC配置:如果你的项目里有自定义配置类手动添加了
@EnableWebMvc或者直接依赖EnableWebMvcConfiguration,尽量交给Spring Boot的自动配置主导加载顺序,不要在非Web环境的配置中提前触发它的初始化。 - 延迟依赖Bean的初始化:对于需要
ServletContext的自定义Bean,加上@Lazy注解让它们延迟到第一次被使用时再初始化,或者用@ConditionalOnWebApplication注解限制只有Web环境就绪后才加载这些Bean。 - 调整配置类加载顺序:如果必须自定义Web MVC配置,可以给你的配置类加上
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class),确保它在Spring Boot的DispatcherServlet自动配置完成之后再加载,此时ServletContext已经准备就绪。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

