Wbudowany tomcat Spring Boot jest bardzo przydatny zarówno do programowania, jak i wdrażania.Spring Boot: Jak dodać kolejne pliki WAR do osadzonego tomcat?
Ale co, jeśli należy dodać inny plik WAR (na przykład GeoServer)?
Może dodaje się zwykłą procedurę:
- Instalacja normalny serwer Tomcat.
- Utwórz aplikację Spring Boot jako plik WAR i dodaj ją do folderu webapps serwera Tomcat.
- Dodaj również inny plik WAR (3rd-party) do folderu webapps.
Ale byłoby miło, gdyby następująca konfiguracja była możliwa.
- Zbuduj aplikację rozruchową Spring jako samodzielny Jar, który zawiera osadzony Tomcat.
- Wdróż jar Jar aplikacji.
- Dodaj kolejny plik WAR (firmy zewnętrznej) do folderu, który rozpoznaje osadzony Tomcat.
- Służy do udostępniania zawartości aplikacji Spring boot i innej zawartości WAR za pomocą wbudowanego Tomcat.
Jak można to zrobić?
UPDATE
Gdy aplikacja bagażnika sprężyna jest wykonana z tłuszczu słoik (= wykonywalny JAR), kod odpowiedź nie wystarcza. Zmieniona jeden jest następujący:
@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);
}
};
}
Ponieważ pliki jar w słoiku tłuszczu nie mogą być ładowane przez classloader systemu, wyraźne rodzic classloader musi być określona. W przeciwnym razie dodatkowa WAR nie może załadować słoików z biblioteki do słoja z aplikacją wiosennego rozruchu, która dodała WAR.
Przeczytaj opisy znaczników. "Wbudowany" nie jest "osadzaniem"! – Olaf
Obecnie próbuję zrobić to samo ([patrz tutaj] (http://stackoverflow.com/questions/42191815/cannot-add-web-application-to-built-in-tomcat)), ale dostaję tony wyjątków z powodu braku zależności plików. Masz pomysł, czego tu brakuje? – displayname