Spring-Start-App vs. WAR-Datei auf Tomcat / Jetty [geschlossen]

9

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

Was ist ein Unterschied zwischen:

  • Erstellen Sie eine Spring Boot .jar -Datei und führen Sie sie auf meinem öffentlichen Remote-Host über java -jar myservice.jar ?
  • aus

oder

  • Packen Sie es in .war file und stellen Sie es auf Tomcat / Jetty bereit?

Die erste Option scheint viel einfacher zu sein, du musst nur ein .jar ausführen. Als zweite Option müssen Sie eine Tomcat-Instanz erstellen, sie ausführen und dann eine .war -Datei bereitstellen. Gibt es einen anderen Unterschied? Irgendwelche Vor- und Nachteile beider Methoden?

    
ilovkatie 16.11.2016, 20:21
quelle

2 Antworten

10
  

Packen Sie es in die .war-Datei und stellen Sie es auf Tomcat / Jetty bereit?

Tun Sie dies nicht, wenn es überhaupt möglich ist. Grund : Mit embedded tomcat (oder einem anderen Server) ist es viel einfacher, eine Micro-Services-Architektur zu erstellen.

Wie Josh Long einmal in einem seiner Vorträge im Frühjahr sagte IO “make Jar, not War”

Wenn Sie andererseits eine vorhandene Infrastruktur mit Servlet-Containern haben und bereits mehrere application.wars in diesen Servlet-Containern ausgeführt werden, müssen Sie lediglich Ihre Anwendung als WAR-Datei und Hand packen Es geht um ein Release-Team (oder vielmehr, Sie sind gezwungen, einfach die vorhandene Infrastruktur wiederzuverwenden), dann ist es eine andere Geschichte ... Aber die Techworld bewegt sich bereits weg von dieser Praxis.

Im Sinne von Microservices möchte ich Sie im Sinne von Springboots dazu ermutigen, einen eingebetteten Server zu verwenden und eine ausführbare JAR-Datei zu erstellen, anstatt die herkömmliche Bereitstellung zu verwenden.

Bearbeiten

Wenn Sie Ihre Anwendung docken, haben Sie zwei Möglichkeiten, Ihren Tomcat in Ihr Artefakt zu packen (Docker-Image, nicht das Jar, es ist nur ein Zwischenprodukt).

  1. Verwenden Sie den eingebetteten Tomcat, so dass der Tomcat in Ihr Jar gepackt wird und ein JVM-Docker-Image verwendet wird

ODER

  1. Schließe tomcat aus und pack einfach deine Anwendung in dein jar und benutze ein tomcat Docker image.

Trotzdem würde ich jeden Tag mit der ersten Option gehen, weil das den Entwicklungsprozess viel einfacher macht (und das heißt, ein Onboarding eines neuen Entwicklers wird so einfach wie ein Kinderspiel).

    
so-random-dude 17.11.2016, 06:40
quelle
1

Wie auf der Produktseite beschrieben, enthalten diese Jars den Servlet-Container und starten ihn direkt.

  

Betten Sie Tomcat, Jetty oder Undertow direkt ein (Sie müssen keine WAR-Dateien bereitstellen)

Wenn Sie beabsichtigen, Ihre Anwendung auf einem Host zu betreiben, mit nichts anderem daneben (docker?), könnte das eine gute Möglichkeit sein. Wenn Ihr Host andere Apps enthält, wäre der Ansatz zum Bereitstellen von Kriegen interessanter Servlet-Container nur einmal auf Ihrem Host.

    
dahrens 16.11.2016 20:28
quelle

Tags und Links