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.