Stellen Sie ein Spring Boot WAR auf einem Tomcat-Server bereit

1. Einleitung

Spring Boot ist eine Konvention über das Konfigurationsframework, mit der wir ein produktionsfertiges Setup eines Spring-Projekts einrichten können. Tomcat ist einer der beliebtesten Java-Servlet-Container.

Standardmäßig erstellt Spring Boot eine eigenständige Java-Anwendung, die als Desktop-Anwendung ausgeführt oder als Systemdienst konfiguriert werden kann. In einigen Umgebungen können wir jedoch keinen neuen Dienst installieren oder die Anwendung nicht manuell ausführen.

Im Gegensatz zu eigenständigen Anwendungen wird Tomcat als Dienst installiert, der mehrere Anwendungen innerhalb desselben Anwendungsprozesses verwalten kann, ohne dass für jede Anwendung ein bestimmtes Setup erforderlich ist.

In diesem Handbuch erstellen wir eine einfache Spring Boot-Anwendung und passen sie an die Arbeit in Tomcat an.

2. Einrichten einer Spring Boot-Anwendung

Wir werden eine einfache Spring Boot-Webanwendung mit einer der verfügbaren Starter-Vorlagen einrichten:

 org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE     org.springframework.boot spring-boot-starter-web  

Es sind keine zusätzlichen Konfigurationen erforderlich, die über die Standard- @SpringBootApplication hinausgehen, da Spring Boot das Standard-Setup übernimmt.

Wir fügen einen einfachen REST-Endpunkt hinzu, um gültigen Inhalt für uns zurückzugeben:

@RestController public class TomcatController { @GetMapping("/hello") public Collection sayHello() { return IntStream.range(0, 10) .mapToObj(i -> "Hello number " + i) .collect(Collectors.toList()); } }

Führen Sie nun die Anwendung mit mvn spring-boot: run aus und starten Sie einen Browser unter // localhost: 8080 / hello , um die Ergebnisse zu überprüfen.

3. Erstellen eines Spring Boot WAR

Servlet-Container erwarten, dass die Anwendungen einige Verträge erfüllen, die bereitgestellt werden sollen. Für Tomcat ist der Vertrag die Servlet-API 3.0.

Damit unsere Anwendung diesen Vertrag erfüllt, müssen wir einige kleine Änderungen am Quellcode vornehmen.

Zuerst müssen wir eine WAR-Anwendung anstelle einer JAR packen. Dazu ändern wir pom.xml mit folgendem Inhalt:

war

Ändern wir nun den endgültigen WAR- Dateinamen, um das Einfügen von Versionsnummern zu vermeiden:

 ${artifactId} ... 

Dann fügen wir die Tomcat-Abhängigkeit hinzu:

 org.springframework.boot spring-boot-starter-tomcat provided 

Schließlich initialisieren wir den von Tomcat benötigten Servlet-Kontext, indem wir die SpringBootServletInitializer- Schnittstelle implementieren :

@SpringBootApplication public class SpringBootTomcatApplication extends SpringBootServletInitializer { }

Um unsere von Tomcat bereitstellbare WAR-Anwendung zu erstellen, führen wir das mvn clean-Paket aus. Danach wird unsere WAR-Datei unter target / spring-boot-tomcat.war generiert (vorausgesetzt, die Maven- Artefakt -ID lautet "spring-boot-tomcat").

Wir sollten berücksichtigen, dass dieses neue Setup unsere Spring Boot-Anwendung zu einer nicht eigenständigen Anwendung macht (wenn Sie möchten, dass sie wieder im eigenständigen Modus funktioniert, entfernen Sie den bereitgestellten Bereich aus der Tomcat-Abhängigkeit).

4. Bereitstellen des WAR auf Tomcat

Damit unsere WAR-Datei in Tomcat bereitgestellt und ausgeführt werden kann, müssen die folgenden Schritte ausgeführt werden:

  1. Laden Sie Apache Tomcat herunter und entpacken Sie es in einen Tomcat- Ordner
  2. Kopieren Sie unsere WAR-Datei von target / spring-boot-tomcat.war in den Ordner tomcat / webapps /
  3. Navigieren Sie von einem Terminal zum Ordner tomcat / bin und führen Sie ihn aus
    1. katalina.bat ausführen (unter Windows)
    2. katalina.sh ausführen (auf Unix-basierten Systemen)
  4. Gehen Sie zu // localhost: 8080 / spring-boot-tomcat / hallo

Dies war eine schnelle Einrichtung von Tomcat. Eine vollständige Anleitung zur Einrichtung finden Sie in der Anleitung zur Tomcat-Installation. Es gibt auch zusätzliche Möglichkeiten, eine WAR-Datei für Tomcat bereitzustellen.

5. Schlussfolgerung

In dieser Kurzanleitung haben wir eine einfache Spring Boot-Anwendung erstellt und in eine gültige WAR-Anwendung umgewandelt, die auf einem Tomcat-Server bereitgestellt werden kann.

Wie immer ist der vollständige Quellcode der Beispiele auf GitHub verfügbar.