Итак, у меня есть приложение webMVC с пружинной загрузкой 2.7.17 на порту 8080, которое в настоящее время настроено автоматически (поэтому используется WebMvcAutoConfiguration.class)
Я Я добавляю привод на порт 8081 (что означает разделение DispatcherServlet и дочернего WebAppContext), пытаясь сделать его клиентом для Spring-Boot-admin.
Но с этого момента возникает проблема: в нашем приложении мы выполняем некоторые пользовательские конфигурации в нашем WebMvcConfigurer, в настоящее время этот WebMvcConfigurer принадлежит корневому контексту WebAppContext, поэтому эти пользовательские конфигурации применяются к приводу, изменяя вывод по умолчанию. В результате Spring-boot-admin не может работать с такими ответами исполнительного механизма.
Поэтому моя идея заключалась в том, чтобы создать дополнительный отдельный WebAppContext, в который я помещу WebMvcConfigurer. Он не будет виден для корневого контекста, поэтому привод не будет затронут. Позвольте мне создать глупую схему, чтобы продемонстрировать эту идею:
Код: Выделить всё
+---------------------------+ +---------------------------+
| Root WebAppContext | | Root AppContext |
| | +---------------------------+
| contains WebMvcConfigurer | / \
+---------------------------+ PLAN --> / \
| / \
+---------------------------+ +---------------------------+ +---------------------------+
| Child-actuator | | Child WebAppContext | | Child-actuator |
| WebAppContext | | contains WebMvcConfigurer | | WebAppContext |
| consumes WebMvcConfigurer | +---------------------------+ +---------------------------+
| and breaks spr-boot-admin | PROFIT
+---------------------------+
Код: Выделить всё
@Bean
public DispatcherServlet dispatcherServlet(WebApplicationContext webApplicationContext) {
AnnotationConfigWebApplicationContext webContext = new AnnotationConfigWebApplicationContext();
webContext.setParent(webApplicationContext);
webContext.register(WebMvcConfig.class);
return new DispatcherServlet(webContext);
}
@EnableWebMvc
public static class WebMvcConfig implements WebMvcConfigurer {
...
без @EnableWebMvc WebMvcConfig не вызывается и не применяется, НО С @EnableWebMvc вся WebMvcAutoConfiguration не вызывается поэтому у меня возникают проблемы в других местах.
Насколько я понимаю, проблема моей попытки заключается в том, что WebAppContext создается в корневом контексте, а не в ребенка, как показано ниже:
Код: Выделить всё
+---------------------------+
| Root WebAppContext | - WebAppContext is initialised here, while it should be simple AppContext here, while webMvc initialisation should be moved to child context
+---------------------------+
/ \
/ \
/ \
+---------------------------+ +---------------------------+
| Child WebAppContext | | Child-actuator |
| contains WebMvcConfigurer | | WebAppContext |
+---------------------------+ +---------------------------+
with @EnableWebMvc - WebMvcConfigurer applied, but WebMvcAutoConfiguration is switched off -> troubles
without @EnableWebMvc - WebMvcConfigurer not applied.
Или, может быть, кто-нибудь знает, как запустить WebMvcConfigurer без @EnableWebMvc?
Подробнее здесь: https://stackoverflow.com/questions/792 ... ld-context
Мобильная версия