Ich habe eine folgende ProjektstrukturFrühling Boot-Multi-Modul servletDispatchers
-Project
|-config
| |-modules
| |-admin
| |-web
|- platform
Platform ist das Projekt, das die Feder-Boot-Startklasse enthält, Platform eine Abhängigkeit von der Konfiguration hat und Config hatte Abhängigkeiten auf allem im Verzeichnis Module Platform ist auch das Modul, das mit dem Befehl mvn spring-boot: run gestartet wird.
Das, was ich zu tun versuche, ist, dass die Module Admin und Web (beiden Web-Anwendungen), um ihr eigenes Mapping wie
- /admin haben
- /web
Der folgende Code stellt einen Controller im Admin-Modul dar, das Web-Modul enthält auch einen ähnlichen Controller (das ist der Punkt)
@Controller
public class AdminController {
@RequestMapping("/")
public String adminController() {
return "admin";
}
}
Hier einige Code für die Konfiguration der Admin-Modul
@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");
}
}
Etwas Ähnliches gilt für den Web-Modul
ich versucht habe, die die einige der gegebenen Antworten zu implementieren.
- Using multiple dispatcher servlets/web contexts with spring boot
- Spring Boot (JAR) with multiple dispatcher servlets for different REST APIs with Spring Data REST
- Und viele
googeln Wenn ich die Komponente Scan lassen, scannen beide Module (Entfernen des ComponentScan Filter)
ich eine bekommen eine mehrdeutige Abbildung Ausnahme gefunden, die besagt, dass beide Controller-Methoden zum selben Pfad "/"
sendenWenn Sie jedoch den Komponenten-Scan auf einem der Module deaktivieren, werden die Admin-Module tatsächlich zu/admin zugeordnet.
Wenn ich beide Controller deaktiviere, sehe ich, dass die/web und/admin dispatchServlets zugeordnet werden.
Also ich verstehe die Ausnahme, aber ich verstehe nicht, wie das zu lösen ist. Für mich ist es ein Muss, dass ich das pro Modul tun kann, und ich will nicht, dass es zur Karte
@RequestMapping("/admin")
auf dem Controller-Klasse
Ich habe auch versucht die contextPath und servletPath in den application.properties Angabe
Also meine Frage ist: Was wäre der beste Ansatz, um mein Ziel zu erreichen, oder versuche ich Spring-Boot für etwas zu verwenden, für das es nicht vorgesehen war.
bearbeiten Ein Proof-of-Concept würde
ich sie in separaten Paketen haben, separate Module selbst. und der Scan-Ansatz funktionierte auch nicht für mich. –