2015-07-09 3 views
5

Я использую spring-boot-starter-parent как родительский и добавьте spring-boot-starter-web как denpendency.Как настроить загрузку диспетчераServlet при запуске весной?

Добавляем аннотацию @SpringBootApplication, она работает.

Но DispatcherServlet инициализации необходимо

 Initializing servlet 'dispatcherServlet' 
    FrameworkServlet 'dispatcherServlet': initialization started 
    Using MultipartResolver [org.springf[email protected]745f40ac] 
    Unable to locate LocaleResolver with name 'localeResolver': using default [[email protected]219fc57d] 
    Unable to locate ThemeResolver with name 'themeResolver': using default [[email protected]d] 
    Unable to locate RequestToViewNameTranslator with name 'viewNameTranslator': using default [org.spri[email protected]71ccfa36] 
    Unable to locate FlashMapManager with name 'flashMapManager': using default [[email protected]3f3e6a9] 
    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-документ о BeanNameUrlHandlerMapping:

Это реализация по умолчанию используется org.springframework.web.servlet.DispatcherServlet, наряду с org.springframework.web.servlet. mvc.annotation.DefaultAnnotationHandlerMapping (на Java 5 и выше). Альтернативно, SimpleUrlHandlerMapping позволяет настраивать сопоставление обработчиков декларативно.

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

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

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

Благодарим за помощь, которую вы можете предоставить.

ответ

1

Я столкнулся с той же проблемой с loadOnStartup. Я решил это, используя пользовательский BeanFactoryPostProcessor, чтобы изменить BeanDefinitionServletRegistrationBean, который создает Spring Boot для регистрации DispatcherServlet.

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

BTW, то BeanNameUrlHandlerMapping безвреден здесь.

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

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

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

0

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