как настроить загрузку "dispatcherServlet" при запуске с помощью spring boot?

я использую spring-boot-starter-parent как родитель и добавить spring-boot-starter-web как denpendency.

по добавить @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

Я читал java-doc о BeanNameUrlHandlerMapping:

это реализация по умолчанию используется орг.springframework.сеть.сервлет.DispatcherServlet, вместе с org.springframework.сеть.сервлет.в MVC.аннотация.DefaultAnnotationHandlerMapping (на Java 5 и выше). Кроме того, SimpleUrlHandlerMapping позволяет настраивать отображение обработчика декларативно.

вот и все, я просто хочу изменить эти две вещи:

  1. setLoadonStartup
  2. не используйте BeanNameUrlHandlerMapping

рядом с этим, другое дело Весна настройка загрузки для меня очень велика,и я хочу сохранить ее.

Спасибо за любую помощь вы можете предоставить.

3 ответов


я столкнулся с той же проблемой с loadOnStartup. Я решил это с помощью custom BeanFactoryPostProcessor изменить BeanDefinition на ServletRegistrationBean что Spring Boot создает для регистрации DispatcherServlet.

следующий код будет установлен loadOnStartup на DispatcherServlet в приложении Spring Boot, при использовании в @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);
        }
    };
}

новый ответ на старый пост. Кажется, это проще сделать с более поздними версиями Spring Boot. Просто добавив свойство spring.mvc.servlet.load-on-startup=1 работает для меня.


кстати,BeanNameUrlHandlerMapping здесь безвредно.

он используется для сопоставления Spring Bean с URL - адресом-например, он может использоваться для поддержки Spring HttpInvoker remoting.

строки отклонения в выходных данных журнала просто означают, что он не распознает ни один из весенних бобов как бобы, требующие сопоставления URL. Раздражающие сообщения, но безвредные. Вы всегда можете установить уровень ведения журнала для этого компонента или его пакета в INFO или выше, чтобы удалить сообщение. Весной бутс application.properties положи

logging.level.org.springframework.web.servlet.handler=INFO