Der eingebettete Tomcat von Spring Boot ist sowohl für die Entwicklung als auch für die Bereitstellung sehr praktisch.Spring Boot: Wie fügt man dem eingebetteten Tomcat weitere WAR-Dateien hinzu?
Aber was ist, wenn eine andere (3rd-Party) WAR-Datei (zum Beispiel GeoServer) hinzugefügt werden sollte?
Vielleicht ist das folgende das normale Verfahren:
- einen normalen Tomcat-Server installieren.
- Erstellen Sie die Spring Boot-Anwendung als WAR-Datei und fügen Sie sie dem Ordner webapps des Tomcat hinzu.
- Fügen Sie auch eine andere (3rd-party) WAR-Datei zum Ordner webapps hinzu.
Aber es wäre nett, wenn die folgende Konfiguration möglich wäre.
- Erstellen Sie die Spring Boot-Anwendung als eigenständige Jar, die den integrierten Tomcat enthält.
- Stellen Sie die Spring-Startanwendung Jar bereit.
- Fügen Sie eine weitere (3rd-party) WAR-Datei zu einem Ordner hinzu, den der eingebettete Tomcat erkennt.
- Den Inhalt der Spring-Boot-Anwendung und den Inhalt des anderen WAR mithilfe des eingebetteten Tomcat bereitstellen.
Wie kann es gemacht werden?
UPDATE
Wenn die Feder Boot-Anwendung von Fett jar (= ausführbare jar) gemacht wird, ist der Code in der Antwort nicht genug. Der überarbeitete ist wie folgt:
@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);
}
};
}
Da die JAR-Dateien in einem Fett Glas können nicht durch das System Classloader, ein expliziter Mutterclassloader angegeben werden muss geladen werden. Andernfalls kann der zusätzliche WAR die Bibliotheks-Jars nicht in den Fat-Jar der Spring-Boot-Anwendung laden, die den WAR hinzugefügt hat.
Lesen Sie die Tag-Beschreibungen. "Embedded" ist nicht "Einbetten"! – Olaf
Ich versuche derzeit, das gleiche zu tun ([siehe hier] (http://stackoverflow.com/questions/42191815/cannot-add-web-application-to-built-in-tomcat)), aber ich bekomme Tonnen von Ausnahmen wegen fehlender Dateiabhängigkeiten. Irgendeine Idee, was ich hier verpasse? – displayname