Разделение контекста приложения Spring: автоматическая настройка webMvc в дочернем контекстеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Разделение контекста приложения Spring: автоматическая настройка webMvc в дочернем контексте

Сообщение Anonymous »

У меня возникли трудности с отделением Spring-actuator-ApplicationContext от моего собственного WebApplicationContext. Может быть, кто-нибудь может мне помочь.
Итак, у меня есть приложение 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
+---------------------------+
Проблема в том, что я не знаю, как это сделать с помощью Spring-boot-autoconfiguration. На самом деле я попробовал следующее:

Код: Выделить всё

@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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»