Spring Boot-applicatie als een service

1. Overzicht

In dit artikel worden enkele opties besproken om Spring Boot-applicaties als service uit te voeren.

Ten eerste gaan we de verpakkingsopties en systeemservices van webapplicaties toelichten. In de volgende secties onderzoeken we verschillende alternatieven die we hebben bij het opzetten van een service voor zowel Linux- als Windows-gebaseerde systemen.

Ten slotte sluiten we af met enkele verwijzingen naar aanvullende informatiebronnen.

2. Projectconfiguratie en bouwinstructies

2.1. Verpakking

Webapplicaties worden traditioneel verpakt als een webapplicatie-aRchives (WAR) en geïmplementeerd op een webserver.

Spring Boot-applicaties kunnen zowel als WAR- als JAR-bestanden worden verpakt. Deze laatste integreert een webserver in een JAR-bestand, waardoor u applicaties kunt draaien zonder dat u een applicatieserver hoeft te installeren en configureren.

2.2. Maven-configuratie

Laten we beginnen met het definiëren van de configuratie van onze pom.xml het dossier:

jar org.springframework.boot spring-boot-starter-parent 1.4.0.RELEASE .... org.springframework.boot spring-boot-maven-plugin true 

De verpakking moet worden ingesteld op pot. We gebruiken op het moment van schrijven de nieuwste stabiele versie van Spring Boot, maar elke versie na 1.3 is voldoende. Hier vindt u meer informatie over beschikbare versies.

Merk op dat we de parameter naar waar voor de spring-boot-maven-plugin artefact. Dit zorgt ervoor dat a MANIFEST.MF bestand is toegevoegd aan het JAR-pakket. Dit manifest bevat een Hoofdklasse item dat specificeert welke klasse de hoofdmethode voor uw toepassing definieert.

2.3. Bouwen aan uw applicatie

Voer de volgende opdracht uit in de hoofdmap van uw toepassing:

$ mvn schoon pakket

Het uitvoerbare JAR-bestand is nu beschikbaar in het doelwit directory en we kunnen de applicatie starten door de volgende opdracht op de opdrachtregel uit te voeren:

$ java -jar uw-app.jar

Op dit punt moet u nog steeds de Java-interpreter aanroepen met de -pot keuze. Er zijn veel redenen waarom het de voorkeur verdient om uw app te laten starten door deze als een service aan te roepen.

3. Op Linux

Om een ​​programma als achtergrondproces uit te voeren, zouden we eenvoudig de nohup Unix-commando, maar dit heeft om verschillende redenen ook niet de voorkeur. In deze thread wordt een goede uitleg gegeven.

In plaats daarvan gaan we demoniseren ons proces. Onder Linux kunnen we ervoor kiezen om een ​​daemon te configureren met een traditioneel Systeem V init script of met een Systemd configuratiebestand. De eerste is traditioneel de meest bekende optie, maar wordt geleidelijk vervangen door de laatste.

Mogelijk vindt u hier meer informatie over dit verschil.

Voor verbeterde beveiliging maken we eerst een specifieke gebruiker om de service mee uit te voeren en wijzigen de machtigingen voor uitvoerbare JAR-bestanden dienovereenkomstig:

$ sudo useradd baeldung $ sudo passwd baeldung $ sudo chown baeldung: baeldung jouw-app.jar $ sudo chmod 500 jouw-app.jar

3.1. Systeem V Init

Een uitvoerbaar JAR-bestand van Spring Boot maakt het instellen van de service erg eenvoudig:

$ sudo ln -s /path/to/your-app.jar /etc/init.d/your-app

De bovenstaande opdracht maakt een symbolische link naar uw uitvoerbare JAR-bestand. U moet het volledige pad naar uw uitvoerbare JAR-bestand gebruiken, anders werkt de symbolische koppeling niet correct. Met deze link kunt u de applicatie als een service starten:

$ sudo service uw app start

Het script ondersteunt de standaardservice begin, hou op, herstarten en toestand commando's. Bovendien:

  • het start de services die onder de gebruiker worden uitgevoerd baeldung we hebben zojuist gemaakt
  • het volgt de proces-ID van de applicatie in /var/run/your-app/your-app.pid
  • het schrijft consolelogboeken naar /var/log/uw-app.log, die u misschien wilt controleren voor het geval uw toepassing niet correct start

3.2. Systemd

De systemd service-installatie is ook heel eenvoudig. Ten eerste maken we een script met de naam uw-app.service aan de hand van het volgende voorbeeld en plaats het in / etc / systemd / system directory:

[Eenheid] Beschrijving = Een Spring Boot-applicatie After = syslog.target [Service] Gebruiker = baeldung ExecStart = / pad / naar / jouw-app.jar SuccessExitStatus = 143 [Installeren] WantedBy = multi-user.target

Vergeet niet om te wijzigen Omschrijving, Gebruiker en ExecStart velden die bij uw toepassing passen. U zou op dit punt ook in staat moeten zijn om de bovengenoemde standaard service-opdrachten uit te voeren.

In tegenstelling tot de Systeem V init benadering beschreven in de vorige sectie, moeten het proces-ID-bestand en het consolelogbestand expliciet worden geconfigureerd met behulp van de juiste velden in het servicescript. Een volledige lijst met opties vindt u hier.

3.3. Parvenu

Upstart is een op gebeurtenissen gebaseerde servicemanager, een mogelijke vervanging voor de Systeem V init dat biedt meer controle over het gedrag van de verschillende daemons.

De site heeft goede installatie-instructies die voor bijna elke Linux-distributie zouden moeten werken. Als u Ubuntu gebruikt, heeft u het waarschijnlijk al geïnstalleerd en geconfigureerd (controleer of er taken zijn waarvan de naam begint met "upstart" in / etc / init).

We creëren een baan uw-app.conf om onze Spring Boot-applicatie te starten:

# Plaats in /home/{user}/.config/upstart beschrijving "Some Spring Boot applicatie" respawn # probeer de service opnieuw op te starten als deze abrupt stopt voer java -jar /path/to/your-app.jar uit 

Draai nu "start uw-app" en uw service zal starten.

Upstart biedt veel opties voor taakconfiguratie, de meeste vindt u hier.

4. Op Windows

In dit gedeelte presenteren we een aantal opties die kunnen worden gebruikt om een ​​Java JAR als Windows-service uit te voeren.

4.1. Windows Service Wrapper

Vanwege problemen met de GPL-licentie van de Java Service Wrapper (zie volgende paragraaf) in combinatie met b.v. de MIT-licentie van Jenkins, het Windows Service Wrapper-project, ook wel bekend als winsw, Was verwekt.

Winsw biedt programmatische middelen om een ​​service te installeren / verwijderen / starten / stoppen. Bovendien kan het worden gebruikt om elk soort uitvoerbaar bestand als een service onder Windows uit te voeren, terwijl Java Service Wrapper, zoals geïmpliceerd door de naam, alleen Java-toepassingen ondersteunt.

Download hier eerst de binaire bestanden. Vervolgens het configuratiebestand dat onze Windows-service definieert, MyApp.xml, zou er als volgt uit moeten zien:

 MyApp MyApp Hiermee wordt Spring Boot as a Service uitgevoerd. java -Xmx256m -jar "% BASE% \ MyApp.jar" roteren 

Ten slotte moet u de naam van het winsw.exe naar MyApp.exe zodat de naam overeenkomt met de MyApp.xml configuratiebestand. Daarna kunt u de service als volgt installeren:

$ MyApp.exe installeren

Evenzo mag u verwijderen, begin, hou op, enz.

4.2. Java-servicewrapper

Als u de GPL-licentieverlening van het Java Service Wrapper-project niet erg vindt, kan dit alternatief voldoen aan uw behoeften om uw JAR-bestand net zo goed als een Windows-service te configureren. Kortom, de Java Service Wrapper vereist ook dat u specificeert in een configuratiebestand dat specificeert hoe uw proces als een service onder Windows moet worden uitgevoerd.

Dit artikel legt op een zeer gedetailleerde manier uit hoe u een dergelijke uitvoering van een JAR-bestand als een service onder Windows instelt, zodat we de informatie niet hoeven te herhalen.

5. Aanvullende verwijzingen

Spring Boot-applicaties kunnen ook worden gestart als Windows-service met behulp van Procrun van het Apache Commons Daemon-project. Procrun is een set applicaties waarmee Windows-gebruikers Java-applicaties kunnen omwikkelen als Windows-services. Een dergelijke service kan worden ingesteld om automatisch te starten wanneer de machine opstart en zal blijven werken zonder dat een gebruiker is aangemeld.

Meer details over het starten van Spring Boot-applicaties onder Unix vindt u hier. Er zijn ook gedetailleerde instructies voor het wijzigen van Systemd-eenheidsbestanden voor op Redhat gebaseerde systemen. Tenslotte

Ten slotte beschrijft deze korte howto hoe u een Bash-script in uw JAR-bestand kunt opnemen, zodat het zelf een uitvoerbaar bestand wordt!

6. Conclusie

Met services kunt u uw applicatiestatus zeer efficiënt beheren en, zoals we hebben gezien, is het instellen van services voor Spring Boot-applicaties nu eenvoudiger dan ooit.

Vergeet niet om de belangrijke en eenvoudige beveiligingsmaatregelen voor gebruikersmachtigingen te volgen om uw service uit te voeren.