Application d’amorçage printanier en tant que service

Application Spring Boot en tant que service

1. Vue d'ensemble

Cet article explore certaines options d'exécution des applications Spring Boot en tant que service.

Tout d'abord, nous allons expliquer les options de packaging et les services système des applications Web. Dans les sections suivantes, nous explorons différentes alternatives possibles lors de la configuration d’un service pour Linux comme systèmes Windows.

Enfin, nous conclurons avec quelques références à des sources d’information supplémentaires.

2. Instructions de configuration et de construction du projet

2.1. Emballage

Les applications Web sont traditionnellement présentées sous la forme d'une application Web (WAR) et déployées sur un serveur Web.

Les applications Spring Boot peuvent être conditionnées à la fois en tant que fichiers WAR et JAR. Ce dernier intègre un serveur Web dans un fichier JAR, ce qui vous permet d'exécuter des applications sans nécessiter d'installation ni de configuration d'un serveur d'applications.

2.2. Configuration Maven

Commençons par définir la configuration de notre fichierpom.xml:

jar


    org.springframework.boot
    spring-boot-starter-parent
    1.4.0.RELEASE



    ....



    
        
            org.springframework.boot
            spring-boot-maven-plugin
            
                true
            
        
    

L'emballage doit être défini surjar. Nous utilisons la dernière version stable de Spring Boot au moment de la rédaction, mais toute version ultérieure à la version 1.3 sera suffisante. Vous pouvez trouver plus d'informations sur les versions disponibleshere.

Notez que nous avons défini le paramètre<executable> surtrue pour l'artefactspring-boot-maven-plugin. Cela garantit qu'un fichierMANIFEST.MF est ajouté au package JAR. Ce manifeste contient une entréeMain-Class qui spécifie quelle classe définit la méthode principale de votre application.

2.3. Construire votre application

Exécutez la commande suivante dans le répertoire racine de votre application:

$ mvn clean package

Le fichier JAR exécutable est maintenant disponible dans le répertoiretarget et nous pouvons démarrer l'application en exécutant la commande suivante sur la ligne de commande:

$ java -jar your-app.jar

À ce stade, vous devez toujours appeler l'interpréteur Java avec l'option-jar. Il existe de nombreuses raisons pour lesquelles il serait préférable de lancer votre application en l'invoquant en tant que service.

3. Sous Linux

Afin d'exécuter un programme en tant que processus d'arrière-plan, nous pourrions simplement utiliser la commande Unix denohup, mais ce n'est pas non plus la méthode préférée pour diverses raisons. Une bonne explication est fournie dans cethread.

Au lieu de cela, nous allonsdaemonize notre processus. Sous Linux, nous pouvons choisir de configurer un démon soit avec un scriptSystem V init traditionnel, soit avec un fichier de configurationSystemd. Le premier est traditionnellement l'option la plus connue, mais il est progressivement remplacé par le second.

Vous trouverez peut-être plus de détails sur cette différencehere.

Pour une sécurité renforcée, nous créons d'abord un utilisateur spécifique avec lequel exécuter le service et modifions les autorisations du fichier JAR exécutable en conséquence:

$ sudo useradd example
$ sudo passwd example
$ sudo chown example:example your-app.jar
$ sudo chmod 500 your-app.jar

3.1. Init système V

Un fichier JAR exécutable Spring Boot simplifie grandement le processus de configuration du service:

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

La commande ci-dessus crée un lien symbolique vers votre fichier JAR exécutable. Vous devez utiliser le chemin d'accès complet à votre fichier JAR exécutable, sinon le lien symbolique ne fonctionnera pas correctement. Ce lien vous permet de démarrer l'application en tant que service:

$ sudo service your-app start

Le script prend en charge les commandes de service standardstart,stop,restart etstatus. De plus:

  • il démarre les services exécutés sous l'utilisateurexample que nous venons de créer

  • il suit l'ID de processus de l'application en/var/run/your-app/your-app.pid

  • il écrit les journaux de la console dans/var/log/your-app.log, que vous voudrez peut-être vérifier si votre application ne démarre pas correctement

3.2. Systemd

La configuration du servicesystemd est également très simple. Tout d'abord, nous créons un script nomméyour-app.service à l'aide de l'exemple suivant et le mettons dans le répertoire/etc/systemd/system:

[Unit]
Description=A Spring Boot application
After=syslog.target

[Service]
User=example
ExecStart=/path/to/your-app.jar SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

N'oubliez pas de modifier les champsDescription,User etExecStart pour qu'ils correspondent à votre application. Vous devriez également pouvoir exécuter les commandes de service standard susmentionnées à ce stade.

Contrairement à l'approcheSystem V init décrite dans la section précédente, le fichier d'ID de processus et le fichier journal de la console doivent être configurés explicitement à l'aide des champs appropriés dans le script de service. Une liste exhaustive d'options peut être trouvéehere.

3.3. Parvenu

Upstart est un gestionnaire de services basé sur les événements, un remplacement potentiel pour lesSystem V init qui offre plus de contrôle sur le comportement des différents démons.

Le site a de bonssetup instructions qui devraient fonctionner pour presque toutes les distributions Linux. Lorsque vous utilisez Ubuntu, vous l'avez probablement déjà installé et configuré (vérifiez s'il existe des travaux dont le nom commence par «upstart» dans/etc/init).

Nous créons une tâcheyour-app.conf pour démarrer notre application Spring Boot:

# Place in /home/{user}/.config/upstart

description "Some Spring Boot application"

respawn # attempt service restart if stops abruptly

exec java -jar /path/to/your-app.jar

Maintenant, lancez "démarrer votre application" et votre service va commencer.

Upstart offre de nombreuses options de configuration de tâches, vous pouvez trouver la plupart d'entre elleshere.

4. Sous Windows

Dans cette section, nous présentons quelques options pouvant être utilisées pour exécuter un fichier JAR Java en tant que service Windows.

4.1. Wrapper de service Windows

En raison de difficultés avec la licence GPL desJava Service Wrapper (voir la sous-section suivante) en combinaison avec par ex. la licence MIT de Jenkins, le projetWindows Service Wrapper, également appeléwinsw, a été conçu.

Winsw fournit des moyens programmatiques pour installer / désinstaller / démarrer / arrêter un service. En outre, il peut être utilisé pour exécuter tout type d’exécutable en tant que service sous Windows, alors que Java Service Wrapper, comme l’implique son nom, ne prend en charge que les applications Java.

Tout d'abord, vous téléchargez les binaireshere. Ensuite, le fichier de configuration qui définit notre service Windows,MyApp.xml, devrait ressembler à ceci:


    MyApp
    MyApp
    This runs Spring Boot as a Service.
    
    java
    -Xmx256m -jar "%BASE%\MyApp.jar"
    rotate

Enfin, vous devez renommer lewinsw.exe enMyApp.exe afin que son nom corresponde au fichier de configuration deMyApp.xml. Ensuite, vous pouvez installer le service comme suit:

$ MyApp.exe install

De même, vous pouvez utiliseruninstall,start,stop, etc.

4.2. Wrapper de service Java

Si la licence GPL du projetJava Service Wrapper ne vous dérange pas, cette alternative peut également répondre à vos besoins de configuration de votre fichier JAR en tant que service Windows. Fondamentalement, Java Service Wrapper nécessite également que vous spécifiiez dans un fichier de configuration qui indique comment exécuter votre processus en tant que service sous Windows.

This article explique de manière très détaillée comment mettre en place une telle exécution d'un fichier JAR en tant que service sous Windows, nous n'avons donc pas besoin de répéter les informations.

5. Références supplémentaires

Les applications Spring Boot peuvent également être démarrées en tant que service Windows à l'aide deProcrun du projetApache Commons Daemon. Procrun est un ensemble d’applications permettant aux utilisateurs Windows d’envelopper des applications Java en tant que services Windows. Un tel service peut être configuré pour démarrer automatiquement au démarrage de la machine et continuera à s'exécuter sans qu'aucun utilisateur ne soit connecté.

Plus de détails sur le démarrage des applications Spring Boot sous Unix peuvent être trouvéshere. Il existe également des instructions détaillées sur la façon de modifier les systèmes basés surSystemd unit files for Redhat. finalement

Enfin,this quick howto décrit comment incorporer un script Bash dans votre fichier JAR, afin qu'il devienne lui-même un exécutable!

6. Conclusion

Les services vous permettent de gérer très efficacement l'état de vos applications et, comme nous l'avons vu, la configuration des services pour les applications Spring Boot est maintenant plus simple que jamais.

N'oubliez pas de suivre les mesures de sécurité importantes et simples applicables aux autorisations des utilisateurs pour exécuter votre service.