Il tomcat incorporato di Spring Boot è molto utile, sia per lo sviluppo che per l'implementazione.Spring Boot: come aggiungere altri file WAR al tomcat incorporato?
E se fosse necessario aggiungere un altro file WAR (di terze parti) (ad esempio, GeoServer)?
Forse il seguente è la procedura normale:
- Installare un normale server Tomcat.
- Costruire l'applicazione Spring Boot come file WAR e aggiungerla alla cartella webapps di Tomcat.
- Inoltre, aggiungere un altro file WAR (di terze parti) alla cartella webapps.
Ma sarebbe bello se fosse possibile la seguente configurazione.
- Costruire l'applicazione di avvio Spring come Jar autonomo, che include Tomcat incorporato.
- Distribuire l'applicazione di avvio Spring Jar.
- Aggiungere un altro file WAR (di terze parti) a una cartella riconosciuta da Tomcat incorporato.
- Serve sia il contenuto dell'applicazione di avvio Spring che i contenuti di un'altra WAR utilizzando il Tomcat incorporato.
Come può essere fatto?
UPDATE
Quando l'applicazione di avvio molla è realizzata in vaso grasso (= jar eseguibile), il codice nella risposta non è sufficiente. Quello rivisto è la seguente:
@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
Tomcat tomcat) {
try {
Context context = tomcat.addWebapp("/foo", "/path/to/foo.war");
WebappLoader loader =
new WebappLoader(Thread.currentThread().getContextClassLoader());
context.setLoader(loader);
} catch (ServletException ex) {
throw new IllegalStateException("Failed to add webapp", ex);
}
return super.getTomcatEmbeddedServletContainer(tomcat);
}
};
}
Dal momento che i file jar in un barattolo di grasso non possono essere caricate dal classloader di sistema, un programma di caricamento classe genitore esplicito deve essere specificato. Altrimenti, la WAR aggiuntiva non può caricare i jar della libreria nel jar grasso dell'applicazione di avvio a molla che ha aggiunto WAR.
Leggere le descrizioni dei tag. "embedded" non è "embedding"! – Olaf
Attualmente sto cercando di fare lo stesso ([vedi qui] (http://stackoverflow.com/questions/42191815/cannot-add-web-application-to-built-in-tomcat)) ma sto ottenendo tonnellate di eccezioni a causa delle dipendenze dei file mancanti. Qualche idea di cosa mi sto perdendo qui? – displayname