У меня есть следующая структура проекта
-Project
|-config
| |-modules
| |-admin
| |-web
|- platform
Платформа - это проект, содержащий класс запуска spring -boot, Платформа зависит от конфигурации и конфигурации, зависящей от всех в модулях каталога Платформа также является модулем, который запускается с помощью команды mvn spring -boot: run.
То, что я пытаюсь выполнить, состоит в том, что администраторы модулей и веб-сайты (оба веб-приложения) имеют собственное сопоставление, например
- /админ
- /веб
Следующий код представляет собой контроллер в модуле администратора, веб-модуль также содержит аналогичный контроллер (это точка)
@Controller
public class AdminController {
@RequestMapping("/")
public String adminController() {
return "admin";
}
}
Вот какой код для конфигурации модуля admin
@Configuration
public class Config implements EmbeddedServletContainerCustomizer {
@Autowired
protected WebApplicationContext webApplicationContext;
@Autowired
protected ServerProperties server;
@Autowired(required = false)
protected MultipartConfigElement multipartConfig;
protected DispatcherServlet createDispatcherServlet() {
AnnotationConfigEmbeddedWebApplicationContext webContext = new AnnotationConfigEmbeddedWebApplicationContext();
webContext.setParent(webApplicationContext);
webContext.scan("some.base.package");
return new DispatcherServlet(webContext);
}
protected ServletRegistrationBean createModuleDispatcher(DispatcherServlet apiModuleDispatcherServlet) {
ServletRegistrationBean registration =
new ServletRegistrationBean(apiModuleDispatcherServlet,
"/admin");
registration.setName("admin");
registration.setMultipartConfig(this.multipartConfig);
return registration;
}
@Bean(name = "adminsServletRegistrationBean")
public ServletRegistrationBean apiModuleADispatcherServletRegistration() {
return createModuleDispatcher(createDispatcherServlet());
}
public void customize(ConfigurableEmbeddedServletContainer container) {
container.setContextPath("/admin");
}
}
Что-то похожее на веб-модуль
Я попытался реализовать некоторые из заданных ответов.
- Использование нескольких сервлетов диспетчера/веб-контекстов с spring загрузкой
- Spring Загрузка (JAR) с несколькими сервлетами диспетчера для разных API-интерфейсов REST с spring Data REST
- И много googling
Когда я разрешаю сканирование компонентов, сканируйте оба модуля (удаление фильтра ComponentScan)
Я получаю исключение с неоднозначным отображением, считая, что оба метода контроллера отправляются на один и тот же путь "/"
Но при отключении проверки компонентов на одном из модулей, действительно, модули admin получают сопоставление с /admin.
когда я отключу оба контроллера, я вижу, что сопоставления диспетчера /web и/admin сопоставляются.
Итак, я понимаю исключение, но я не понимаю, как это решить. Для меня необходимо, чтобы я мог сделать это для каждого модуля, и я не хочу сопоставлять его с помощью
@RequestMapping("/admin")
в классе контроллера
Я также попытался указать contextPath и servletPath в application.properties
Итак, мой вопрос: какой был бы лучший подход для достижения моей цели, или я пытаюсь использовать spring -boot для чего-то, чего не было для этого.
Edit Доказательство концепции было бы приятным