繁体   English   中英

如何通过spring boot配置'dispatcherServlet'在启动时加载?

[英]how to configure 'dispatcherServlet' load on startup by spring boot?

我使用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-doc:

这是org.springframework.web.servlet.DispatcherServlet使用的默认实现,以及org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping(在Java 5及更高版本上)。 或者,SimpleUrlHandlerMapping允许以声明方式自定义处理程序映射。

就是这样,我只想改变这两件事:

  1. setLoadonStartup
  2. 不要使用BeanNameUrlHandlerMapping

除此之外,我为其配置的其他东西非常棒,我想保留它。

感谢您提供任何帮助。

对旧帖子的新回复。 似乎这对于更新版本的Spring Boot更容易。 只需添加属性spring.mvc.servlet.load-on-startup=1对我spring.mvc.servlet.load-on-startup=1

我在loadOnStartup遇到了同样的问题。 我通过使用自定义BeanFactoryPostProcessor来解决它,以修改Spring Boot为注册DispatcherServlet创建的ServletRegistrationBeanBeanDefinition

@Configuration类中使用时,以下代码将为Spring Boot应用程序中的DispatcherServlet设置loadOnStartup

@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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM