Implementeer een Spring Boot WAR in een Tomcat-server

1. Inleiding

Spring Boot is een conventie over configuratieframework waarmee we een productieklare setup van een Spring-project kunnen opzetten, en Tomcat is een van de meest populaire Java Servlet Containers.

Spring Boot bouwt standaard een zelfstandige Java-applicatie die kan worden uitgevoerd als een desktoptoepassing of kan worden geconfigureerd als een systeemservice, maar er zijn omgevingen waarin we geen nieuwe service kunnen installeren of de applicatie handmatig kunnen uitvoeren.

In tegenstelling tot stand-alone applicaties, wordt Tomcat geïnstalleerd als een service die meerdere applicaties binnen hetzelfde applicatieproces kan beheren, waardoor er geen specifieke setup voor elke applicatie nodig is.

In deze handleiding gaan we een eenvoudige Spring Boot-applicatie maken en deze aanpassen om binnen Tomcat te werken.

2. Opzetten van een Spring Boot-applicatie

We gaan een eenvoudige Spring Boot-webtoepassing opzetten met behulp van een van de beschikbare startersjablonen:

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

Er zijn geen aanvullende configuraties nodig buiten de norm @SpringBootApplication aangezien Spring Boot zorgt voor de standaard setup.

We voegen een eenvoudig REST EndPoint toe om wat geldige inhoud voor ons te retourneren:

@RestController openbare klasse TomcatController {@GetMapping ("/ hallo") openbare verzameling sayHello () {retourneer IntStream.range (0, 10) .mapToObj (i -> "Hallo nummer" + i) .collect (Collectors.toList () ); }}

Laten we nu de applicatie uitvoeren met mvn spring-boot: run en start een browser op // localhost: 8080 / hallo om de resultaten te controleren.

3. Creëren van een Spring Boot WAR

Servlet-containers verwachten dat de applicaties aan bepaalde contracten voldoen om te worden geïmplementeerd. Voor Tomcat is het contract de Servlet API 3.0.

Om ervoor te zorgen dat onze applicatie aan dit contract voldoet, moeten we enkele kleine wijzigingen in de broncode aanbrengen.

Ten eerste moeten we een WAR-applicatie verpakken in plaats van een JAR. Hiervoor veranderen we pom.xml met de volgende inhoud:

oorlog

Laten we nu de finale wijzigen OORLOG bestandsnaam om te vermijden dat versienummers worden opgenomen:

 $ {artifactId} ... 

Vervolgens gaan we de Tomcat-afhankelijkheid toevoegen:

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

Ten slotte initialiseren we de Servlet-context die Tomcat nodig heeft door het SpringBootServletInitializer koppel:

@SpringBootApplication openbare klasse SpringBootTomcatApplication breidt SpringBootServletInitializer uit {}

Om onze Tomcat-inzetbare WAR-applicatie te bouwen, voeren we het mvn schone pakket. Daarna wordt ons WAR-bestand gegenereerd op target / spring-boot-tomcat.war (in de veronderstelling dat de Maven artefact-id is "spring-boot-tomcat").

We moeten er rekening mee houden dat deze nieuwe setup onze Spring Boot-applicatie een niet-zelfstandige applicatie maakt (als je hem weer in de stand-alone modus wilt hebben, verwijder dan de voorzien scope van de tomcat-afhankelijkheid).

4. Implementatie van de WAR op Tomcat

Om ons WAR-bestand te implementeren en te laten werken in Tomcat, moeten we de volgende stappen uitvoeren:

  1. Download Apache Tomcat en pak het uit in een kater map
  2. Kopieer ons WAR-bestand van target / spring-boot-tomcat.war naar de kater / webapps / map
  3. Navigeer vanaf een terminal naar kater / bak map en voer uit
    1. catalina.bat uitvoeren (op Windows)
    2. catalina.sh uitvoeren (op Unix-gebaseerde systemen)
  4. Ga naar // localhost: 8080 / spring-boot-tomcat / hallo

Dit was een snelle Tomcat-installatie. Raadpleeg de handleiding over Tomcat-installatie voor een volledige installatiehandleiding. Er zijn ook andere manieren om een ​​WAR-bestand op Tomcat te implementeren.

5. Conclusie

In deze korte handleiding hebben we een eenvoudige Spring Boot-applicatie gemaakt en deze omgezet in een geldige WAR-applicatie die op een Tomcat-server kan worden geïmplementeerd.

Zoals altijd is de volledige broncode van de voorbeelden beschikbaar op GitHub.