我有一个相当简单的spring-boot应用程序,在调试问题时,由于缓存无效化资源URL生成,发现在应用程序启动时未触发WebMvcAutoConfiguration。
这是相关的日志输出:
WebMvcAutoConfiguration:
Did not match:
- @ConditionalOnMissingBean (types: org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; SearchStrategy: all) found beans of type 'org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport' org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration (OnBeanCondition)
Matched:
- @ConditionalOnClass found required classes 'javax.servlet.Servlet', 'org.springframework.web.servlet.DispatcherServlet', 'org.springframework.web.servlet.config.annotation.WebMvcConfigurer'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
- found ConfigurableWebEnvironment (OnWebApplicationCondition)
在调试了几个小时并将空应用程序行为与我的进行比较后,我发现的唯一区别是,我的应用程序中有更多的MvcConfigurer实例。即:
我的自定义WebMvcConfigurer(用于cors和其他内容)
Spring-JPA配置器
弹簧数据配置器
我希望这些东西能够并存,但是显然还有其他作用。
现在我很茫然,因为我花了很多时间调试此问题。
我的问题是如何找到禁用WebMvcAutoConfiguration的缺少的DelegatingWebMvcConfiguration bean的来源?
最佳答案
我只是在SpringBoot 2.1.3.RELEASE中遇到这个问题,在解决问题之前已经很久了,但也许可以帮助其他人。
解决方案只是删除@EnableWebMvc。
如果您查看EnableWebMvc类,它将直接导入DelegatingWebMvcConfiguration,因此,当WebMvcAutoConfiguration验证条件时,将找到DelegatingWebMvcConfiguration Bean。
如果没有EnableWebMvc,WebMvcAutoConfiguration就可以使用,并且具有静态配置:
@Configuration
public static class EnableWebMvcConfiguration extends DelegatingWebMvcConfiguration
也许这会产生其他影响,但是我只是开始我的项目,而我无法验证。