我使用spring-boot-starter-parent
作为父,并添加spring-boot-starter-web
作为依赖项。
通过添加@SpringBootApplication
注释,它可以工作。
但DispatcherServlet
需要初始化
Initializing servlet 'dispatcherServlet'
FrameworkServlet 'dispatcherServlet': initialization started
Using MultipartResolver [org.springframework.web.multipart.support.StandardServletMultipartResolver@745f40ac]
Unable to locate LocaleResolver with name 'localeResolver': using default [org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver@219fc57d]
Unable to locate ThemeResolver with name 'themeResolver': using default [org.springframework.web.servlet.theme.FixedThemeResolver@7b4bd6bd]
Unable to locate RequestToViewNameTranslator with name 'viewNameTranslator': using default [org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator@71ccfa36]
Unable to locate FlashMapManager with name 'flashMapManager': using default [org.springframework.web.servlet.support.SessionFlashMapManager@43f3e6a9]
Published WebApplicationContext of servlet 'dispatcherServlet' as ServletContext attribute with name [org.springframework.web.servlet.FrameworkServlet.CONTEXT.dispatcherServlet]
FrameworkServlet 'dispatcherServlet': initialization completed in 37 ms
我希望我可以设置它的loadonstartup为1,并不想使用这个讨厌的BeanNameUrlHandlerMapping
,它拒绝了一切,我不打算用它。
o.s.w.s.h.BeanNameUrlHandlerMapping : Rejected bean name 'contextAttributes': no URL paths identified
我读了关于BeanNameUrlHandlerMapping
的java文档:
这是org.springframework.web.servlet使用的默认实现。DispatcherServlet,以及org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping(在Java 5及更高版本上)。或者,SimpleUrlHandlerMapping允许以声明的方式自定义处理程序映射。
就这些,我只想改变这两件事:
- setLoadonStartup
- 不要使用BeanNameUrlHandlerMapping
除此之外,spring boot为我配置的其他东西非常棒,我想保留它。
感谢您提供的任何帮助
对旧帖子的新回复。似乎使用最新版本的Spring Boot更容易做到这一点。只是添加属性spring.mvc.servlet.load-on-startup=1
为我工作。
我在loadOnStartup
上遇到了同样的问题。我通过使用自定义BeanFactoryPostProcessor
来修改Spring Boot为注册DispatcherServlet
而创建的ServletRegistrationBean
的BeanDefinition
来解决这个问题。
以下代码将在Spring Boot应用程序中为DispatcherServlet
设置loadOnStartup
,当在@Configuration
类中使用时:
@Bean
public static BeanFactoryPostProcessor beanFactoryPostProcessor() {
return new BeanFactoryPostProcessor() {
@Override
public void postProcessBeanFactory(
ConfigurableListableBeanFactory beanFactory) throws BeansException {
BeanDefinition bean = beanFactory.getBeanDefinition(
DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
bean.getPropertyValues().add("loadOnStartup", 1);
}
};
}
顺便说一句,BeanNameUrlHandlerMapping
在这里是无害的。
它被用来映射一个Spring Bean到一个URL——例如,它可能被用来支持Spring HttpInvoker远程。
日志输出中的拒绝行仅仅表示它不将任何Spring bean识别为需要URL映射的bean。烦人但无害的信息。您始终可以将此bean或其包的日志级别设置为INFO或更高,以删除该消息。在Spring Boot的application.properties
放置
logging.level.org.springframework.web.servlet.handler=INFO