Implementér en Spring Boot WAR i en Tomcat Server

1. Introduktion

Spring Boot er en konvention over konfigurationsramme, der giver os mulighed for at oprette en produktionsklar opsætning af et Spring-projekt, og Tomcat er en af ​​de mest populære Java Servlet Containere.

Spring Boot bygger som standard et enkeltstående Java-program, der kan køre som en desktop-applikation eller konfigureres som en systemtjeneste, men der er miljøer, hvor vi ikke kan installere en ny tjeneste eller køre applikationen manuelt.

I modsætning til enkeltstående applikationer er Tomcat installeret som en tjeneste, der kan administrere flere applikationer inden for samme applikationsproces, hvilket undgår behovet for en specifik opsætning for hver applikation.

I denne vejledning skal vi oprette en simpel Spring Boot-applikation og tilpasse den til at arbejde inden for Tomcat.

2. Opsætning af en Spring Boot-applikation

Vi installerer en simpel Spring Boot-webapplikation ved hjælp af en af ​​de tilgængelige startskabeloner:

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

Der er ikke behov for yderligere konfigurationer ud over standarden @SpringBootApplication siden Spring Boot tager sig af standardopsætningen.

Vi tilføjer et simpelt REST EndPoint for at returnere noget gyldigt indhold til os:

@RestController offentlig klasse TomcatController {@GetMapping ("/ hej") offentlig samling sayHello () {return IntStream.range (0, 10) .mapToObj (i -> "Hej nummer" + i) .collect (Collectors.toList () ); }}

Lad os nu udføre applikationen med mvn spring-boot: løb og start en browser på // localhost: 8080 / hej for at kontrollere resultaterne.

3. Oprettelse af en Spring Boot WAR

Servlet-containere forventer, at applikationerne opfylder nogle kontrakter, der skal implementeres. For Tomcat er kontrakten Servlet API 3.0.

For at få vores ansøgning til at opfylde denne kontrakt, skal vi udføre nogle små ændringer i kildekoden.

Først skal vi pakke en WAR-applikation i stedet for en JAR. Til dette ændrer vi os pom.xml med følgende indhold:

krig

Lad os nu ændre finalen KRIG filnavn for at undgå at inkludere versionsnumre:

 $ {artifactId} ... 

Derefter tilføjer vi Tomcat-afhængigheden:

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

Endelig initialiserer vi den Servlet-kontekst, der kræves af Tomcat ved at implementere SpringBootServletInitializer interface:

@SpringBootApplication offentlig klasse SpringBootTomcatApplication udvider SpringBootServletInitializer {}

For at opbygge vores Tomcat-implementerbare WAR-applikation udfører vi den rene pakke til mvn. Derefter genereres vores WAR-fil kl target / spring-boot-tomcat.war (forudsat Maven artefaktId er "spring-boot-tomcat").

Vi bør overveje, at denne nye opsætning gør vores Spring Boot-applikation til en ikke-selvstændig applikation (hvis du gerne vil have den til at fungere i standalone-tilstand igen, skal du fjerne stillet til rådighed rækkevidde fra tomcat-afhængighed).

4. Implementering af WAR til Tomcat

For at få vores WAR-fil distribueret og køre i Tomcat, skal vi udføre følgende trin:

  1. Download Apache Tomcat og pakk den ud i en tomcat folder
  2. Kopier vores WAR-fil fra target / spring-boot-tomcat.war til tomcat / webapps / folder
  3. Fra en terminal skal du navigere til tomcat / bin mappe og udføre
    1. catalina.bat run (på Windows)
    2. catalina.sh køre (på Unix-baserede systemer)
  4. Gå til // localhost: 8080 / spring-boot-tomcat / hej

Dette har været en hurtig Tomcat-opsætning. Se vejledningen til Tomcat Installation for en komplet installationsvejledning. Der er også flere måder at distribuere en WAR-fil til Tomcat.

5. Konklusion

I denne korte vejledning oprettede vi et simpelt Spring Boot-program og gjorde det til et gyldigt WAR-program, der kan implementeres på en Tomcat-server.

Som altid er den fulde kildekode for eksemplerne tilgængelig på GitHub.