ho una struttura seguente progetto diStivale Primavera servletDispatchers a più moduli
-Project
|-config
| |-modules
| |-admin
| |-web
|- platform
Platform è il progetto che contiene la classe di inizio primavera-boot, piattaforma ha una dipendenza da config e config aveva dipendenze tutto nella directory modules Platform è anche il modulo che inizia con il comando mvn spring-boot: run.
La cosa che sto cercando di realizzare è che i moduli di amministrazione e web (entrambe le applicazioni web) hanno la loro mappatura come
-
/
- amministratore
- /web
Il codice seguente rappresenta un controller nel modulo admin, il modulo web contiene anche un controller simile (questo è il punto)
@Controller
public class AdminController {
@RequestMapping("/")
public String adminController() {
return "admin";
}
}
Qui po 'di codice per la configurazione del modulo di amministrazione
@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");
}
}
Qualcosa di simile vale per il modulo web
Ho provato il implementare l'alcune delle risposte date.
- Using multiple dispatcher servlets/web contexts with spring boot
- Spring Boot (JAR) with multiple dispatcher servlets for different REST APIs with Spring Data REST
- E un sacco di googling
Quando ho lasciato la scansione dei componenti, la scansione di entrambi i moduli (rimuovendo il filtro ComponentScan)
ottengo un una mappatura Ambiguo trovato eccezione, dicendo che entrambi i metodi del controllore inviano allo stesso percorso "/"
Ma quando si disabilita la scansione dei componenti su uno dei moduli, allora i moduli di amministrazione vengono mappati su/admin.
quando disattivo entrambi i controller, vedo che i dispatchServlet/web e/admin vengono mappati.
Quindi ho capito l'eccezione ma non capisco come risolvere questo problema. Per me è un must che posso fare questo per modulo e io non voglio mappare utilizzando
@RequestMapping("/admin")
sulla classe controller
Ho provato anche specificare il contextPath e servletPath nelle application.properties
Quindi la mia domanda è: quale sarebbe l'approccio migliore per raggiungere il mio obiettivo, o sto cercando di usare spring-boot per qualcosa per cui non era adatto.
Modifica una prova di concetto sarebbe bello
li ho in pacchetti separati, moduli separati anche. e l'approccio di scansione non ha funzionato neanche per me. –