webentwicklung-frage-antwort-db.com.de

Auf Tomcat/Jetty bereitgestellte Spring-Boot-App vs.

In meinem Fall betrachten wir einen einfachen RESTful-Dienst, der mit Spring Boot erstellt und konfiguriert wurde. Dieser Dienst kommuniziert mit einer Datenbank (z. B. Postgres). 

Was ist ein Unterschied zwischen:

  • Spring Boot .jar-Datei erstellen und auf meinem öffentlichen Remote-Host über Java -jar myservice.jar ausführen?

oder

  • In .war-Datei packen und auf Tomcat/Jetty bereitstellen?

Die erste Option scheint viel einfacher zu sein, Sie müssen lediglich einen .jar ausführen. Als zweite Option müssen Sie eine Tomcat-Instanz erstellen, ausführen und dann eine .war-Datei bereitstellen. Irgendwelche Vor- und Nachteile beider Methoden?

16
ilovkatie

In eine .war-Datei packen und auf Tomcat/Jetty bereitstellen?

Nicht wenn möglich, dies tun. Reason: Mit Embedded Tomcat (oder einer beliebigen anderen Serverlaufzeit wie Untertow, Netty, Jetty usw.) ist der Aufbau einer Mikrodienstarchitektur viel einfacher.

Wie Josh Long einmal in einem seiner Spring IO Gespräche sagte, “make Jar, not War”

Wenn Sie jedoch bereits über eine vorhandene Infrastruktur mit Servlet-Containern verfügen, werden in diesen Servlet-Containern bereits mehrere application.wars ausgeführt, und Sie müssen Ihre Anwendung lediglich als War-Datei packen und sie übergeben ein Release-Team (oder Sie sind gezwungen, die vorhandene Infrastruktur wiederzuverwenden), dann ist es eine andere Geschichte ... Aber die Tech-Welt entfernt sich bereits von dieser Praxis.

Im Sinne von Microservices möchte ich Sie im Sinne dessen, was der Spring Boot vorsieht, dazu ermutigen, eingebettete Server zu verwenden und eine lauffähige JAR-Datei zu erstellen, anstatt mit der traditionellen Bereitstellung zu beginnen.

Bearbeiten

Wenn Sie Ihre Anwendung andocken, haben Sie zwei Möglichkeiten, Ihren Tomcat in Ihrem "End-Artefakt" zu verpacken (mit "End-Artefakt" meinte ich das Docker-Image, nicht das Glas. Das Glas ist hier nur ein Zwischen-Artefakt).

  1. Verwenden Sie den eingebetteten Tomcat, damit Tomcat in Ihr Glas verpackt wird und verwenden Sie ein JVM-Docker-Image

ODER 

  1. Schließen Sie Tomcat von Ihrem Glas aus, packen Sie einfach Ihre Anwendung und verwenden Sie ein Tomcat Docker-Image.

Trotzdem würde ich mich jeden Tag für die erste Option entscheiden, da dies den Entwicklungsprozess erheblich vereinfacht (und das bedeutet, dass die Integration eines neuen Entwicklers einfacher wird).

17
so-random-dude

Wie auf der Produktseite beschrieben enthalten diese Gläser den Servlet-Container und starten ihn direkt.

Einbetten von Tomcat, Jetty oder Undertow direkt (keine Bereitstellung von WAR-Dateien erforderlich)

Wenn Sie vorhaben, Ihre Anwendung auf einem Host auszuführen, ohne etwas anderes daneben (Docker?), Könnte dies eine gute Möglichkeit sein. Wenn Ihr Host andere Apps enthält, wäre der Ansatz, Wars bereitzustellen, interessanter, da nur Servlet-Container verfügbar sind einmal auf deinem Host.

1
dahrens