Distribuer en Spring Boot WAR i en Tomcat Server
1. Introduksjon
Spring Boot er en konvensjon over konfigurasjonsrammeverk som lar oss sette opp et produksjonsklar oppsett av et Spring-prosjekt, og Tomcat er en av de mest populære Java Servlet Containers.
Som standard bygger Spring Boot et frittstående Java-program som kan kjøre som et skrivebordsprogram eller konfigureres som en systemtjeneste, men det er miljøer der vi ikke kan installere en ny tjeneste eller kjøre applikasjonen manuelt.
I motsetning til frittstående applikasjoner er Tomcat installert som en tjeneste som kan administrere flere applikasjoner i samme applikasjonsprosess, og unngå behovet for et spesifikt oppsett for hver applikasjon.
I denne veiledningen skal vi lage en enkel Spring Boot-applikasjon og tilpasse den til å fungere innen Tomcat.
2. Sette opp et Spring Boot-program
Vi skal sette opp en enkel Spring Boot-nettapplikasjon ved hjelp av en av de tilgjengelige startmaler:
org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE org.springframework.boot spring-boot-starter-web
Det er ikke behov for flere konfigurasjoner utover standarden @SpringBootApplication siden Spring Boot tar seg av standardoppsettet.
Vi legger til en enkel REST EndPoint for å returnere noe gyldig innhold for oss:
@RestController offentlig klasse TomcatController {@GetMapping ("/ hallo") offentlig samling sayHello () {return IntStream.range (0, 10) .mapToObj (i -> "Hello number" + i) .collect (Collectors.toList () ); }}
La oss nå utføre applikasjonen med mvn spring-boot: run og start en nettleser på // localhost: 8080 / hei for å sjekke resultatene.
3. Lage en krigsstøvel-krig
Servlet containere forventer at applikasjonene vil oppfylle noen kontrakter som skal distribueres. For Tomcat er kontrakten Servlet API 3.0.
For å få søknaden vår til å oppfylle denne kontrakten, må vi utføre noen små modifikasjoner i kildekoden.
Først må vi pakke en WAR-applikasjon i stedet for en JAR. For dette forandrer vi oss pom.xml med følgende innhold:
krig
La oss endre finalen KRIG filnavn for å unngå å inkludere versjonsnumre:
$ {artifactId} ...
Deretter skal vi legge til Tomcat-avhengighet:
org.springframework.boot spring-boot-starter-tomcat levert
Til slutt initialiserer vi Servlet-konteksten som kreves av Tomcat ved å implementere SpringBootServletInitializer grensesnitt:
@SpringBootApplication offentlig klasse SpringBootTomcatApplication utvider SpringBootServletInitializer {}
For å bygge vår Tomcat-distribuerbare WAR-applikasjon, kjører vi mvn ren pakke. Etter det blir WAR-filen vår generert kl target / spring-boot-tomcat.war (antar at Maven artefaktId er "spring-boot-tomcat").
Vi bør vurdere at dette nye oppsettet gjør vår Spring Boot-applikasjon til et ikke-frittstående program (hvis du vil at det skal fungere i frittstående modus igjen, fjern sørget for omfang fra tomcat-avhengighet).
4. Distribuere KRIGEN til Tomcat
For å få WAR-filen distribuert og kjøre i Tomcat, må vi fullføre følgende trinn:
- Last ned Apache Tomcat og pakk den ut til en tomcat mappe
- Kopier WAR-filen vår fra target / spring-boot-tomcat.war til tomcat / webapps / mappe
- Fra en terminal naviger til tomcat / søppel mappe og utføre
- catalina.bat run (på Windows)
- catalina.sh kjøre (på Unix-baserte systemer)
- Gå til // localhost: 8080 / spring-boot-tomcat / hallo
Dette har vært et raskt Tomcat-oppsett, vennligst sjekk guiden på Tomcat Installasjon for en komplett installasjonsveiledning. Det er også flere måter å distribuere en WAR-fil til Tomcat.
5. Konklusjon
I denne korte guiden opprettet vi et enkelt Spring Boot-program og gjorde det til et gyldig WAR-program som kan distribueres på en Tomcat-server.
Som alltid er hele kildekoden til eksemplene tilgjengelig på GitHub.