Maak een Fat Jar-app met Spring Boot

1. Inleiding

Een van de meer hartverwarmende ontwikkelingen van de afgelopen jaren is de voortdurende vereenvoudiging van de manier waarop webapplicaties worden ingezet.

Als we alle saaie tussenliggende historische stappen overslaan, komen we uit op vandaag - wanneer we niet alleen kunnen afzien van omslachtige servlets en XML-boilerplate, maar vooral van de servers zelf.

Dit artikel zal zich concentreren op het creëren van een “dikke pot " uit een Spring Boot-applicatie - in feite om een ​​enkel artefact te creëren dat gemakkelijk te implementeren en uit te voeren is.

Boot biedt mogelijkheden voor implementaties zonder containers direct uit de doos: het enige wat we hoeven te doen is een aantal configuraties toe te voegen aan de pom.xml:

  org.springframework.boot spring-boot-starter-web 2.0.1.RELEASE org.springframework.boot spring-boot-maven-plugin 2.0.1.RELEASE 

2. Bouwen en rennen

Met deze configuratie kunnen we nu eenvoudig het project bouwen met de standaard mvn schone installatie - niets ongewoons hier.

En we voeren het uit met het volgende commando: java -jar - heel eenvoudig en intuïtief.

Goed procesbeheer valt buiten het bestek van dit artikel, maar een eenvoudige manier om het proces gaande te houden, zelfs wanneer we de server afmelden, is door de nohup opdracht: nohup java -jar.

Stoppen veerboot projects is ook niet anders dan het stoppen van een regulier proces, of we dat nu simpelweg doen cntrl + c of doden .

3. Fat Jar / Fat War

Achter de schermen, veerboot pakt alle projectafhankelijkheden in het uiteindelijke artefact samen met zijprojectklassen (vandaar de "dikke" pot). Een ingebouwde Tomcat-server is ook ingebouwd.

En daardoor is het resulterende artefact volledig op zichzelf staand, eenvoudig te implementeren met behulp van standaard Unix-tools (scp, sftp… enz.) En kan het op elke server met een JVM worden uitgevoerd.

Standaard maakt Boot een pot bestand - maar als we het verpakking eigendom in pom.xml naar oorlog, Zal Maven in plaats daarvan natuurlijk doen bouw een oorlog.

Dit zal natuurlijk zowel uitvoerbaar als stand-alone zijn, en worden geïmplementeerd in een webcontainer.

4. Verdere configuratie

Meestal is er geen aanvullende configuratie nodig, alles "werkt gewoon", maar in sommige specifieke gevallen moeten we het misschien vertellen veerboot expliciet wat de hoofdklasse is. Een manier om dit te doen is door een eigenschap toe te voegen:

 org.baeldung.boot.Application 

Voor het geval we niet het erven van spring-boot-starter-parent, we moeten het doen in de Maven-plug-in:

 org.springframework.boot spring-boot-maven-plugin 2.0.1.RELEASE org.baeldung.boot.Application ZIP 

Iets anders dat we in sommige zeldzame gevallen moeten doen, is Maven instrueren uitpakken enkele afhankelijkheden:

 org.springframework.boot spring-boot-maven-plugin org.jruby jruby-compleet 

5. Conclusie

In dit artikel hebben we gekeken naar serverloze implementatie met 'dikke' potten die zijn gebouwd door veerboot.

Zoals altijd is de code in dit artikel overal beschikbaar op Github.