La méthode de déploiement préférée de Spring Boot est via un fichier jar exécutable qui contient tomcat à l'intérieur.
Tout commence par un simple java -jar myapp.jar
.
Maintenant, je veux déployer ce jar sur mon serveur Linux sur EC2, est-ce que je manque quelque chose ou dois-je vraiment créer un script d'initialisation pour démarrer correctement l'application en tant que démon?
Si j'appelle simplement, java -jar
l'application meurt lorsque je me déconnecte.
Je pourrais le démarrer en screen ou nohup mais ce n'est pas très élégant et un redémarrage dans mon serveur me forcerait à me connecter et à démarrer le processus manuellement.
Alors, y a-t-il déjà quelque chose pour la tâche dans Spring Boot?
java
linux
spring
spring-boot
Cleber Goncalves
la source
la source
Réponses:
Veuillez noter que depuis Spring Boot 1.3.0.M1, vous pouvez créer des fichiers JAR entièrement exécutables à l'aide de Maven et Gradle.
Pour Maven, incluez simplement les éléments suivants dans votre
pom.xml
:Pour Gradle, ajoutez l'extrait suivant à votre
build.gradle
:Le fichier jar entièrement exécutable contient un script supplémentaire à l'avant du fichier, qui vous permet simplement de créer un lien symbolique entre votre fichier jar Spring Boot
init.d
ou d'utiliser unsystemd
script.init.d
exemple:Cela vous permet de démarrer, d'arrêter et de redémarrer votre application comme:
Ou utilisez un
systemd
script:Plus d'informations sur les liens suivants:
init.d
servicesystemd
servicela source
$ chmod +x /etc/init.d/yourapp
pour pouvoir démarrer / arrêter / redémarrerDocker est de loin le moyen le plus simple et le plus fiable d'exécuter des applications Spring Boot en production. Utilisez Docker Compose, Docker Swarm ou Kubernetes si vous devez utiliser plusieurs services connectés.
Voici un simple
Dockerfile
extrait du guide officiel Spring Boot Docker pour vous aider à démarrer:Voici un exemple de ligne de commande pour exécuter le conteneur en tant que démon:
la source
Mon application de démarrage Spring a deux initialiseurs. Un pour le développement et un autre pour la production. Pour le développement, j'utilise la méthode principale comme ceci:
Mon environnement d'initialisation pour la production étend le SpringBootServletInitializer et ressemble à ceci:
J'utilise gradle et mon fichier build.gradle applique le plugin ' WAR '. Lorsque je l'exécute dans l'environnement de développement, j'utilise la tâche bootrun . Là où je veux le déployer en production, j'utilise la tâche d' assemblage pour générer le WAR et le déployer.
Je peux fonctionner comme une application printemps normale en production sans négliger les avantages fournis par le tomcat intégré lors du développement. J'espère que cela t'aides.
la source
Dans un environnement de production, vous voulez que votre application soit redémarrée lors d'un redémarrage de la machine, etc., la création d'un script /etc/init.d/ et la liaison au niveau d'exécution approprié pour la démarrer et l'arrêter est la bonne approche. Spring Boot ne couvrira pas cela car il s'agit d'une configuration spécifique au système d'exploitation et il existe des tonnes d'autres options, voulez-vous qu'il s'exécute dans une prison chroot, doit-il s'arrêter / démarrer avant un autre logiciel, etc.
la source
Vous pouvez utiliser l'application appelée Superviseur . Dans la configuration du superviseur, vous pouvez définir plusieurs services et les moyens de les exécuter.
Pour les applications de démarrage Java et Spring, la commande serait
java -jar springbootapp.jar
.Des options peuvent être fournies pour que l'application continue de fonctionner.Ainsi, si l'EC2 redémarre, Supervisor redémarrera votre application
J'ai trouvé Supervisor facile à utiliser par rapport à la mise des scripts de démarrage dans /etc/init.d/. Les scripts de démarrage se bloquaient ou passaient en état d'attente en cas d'erreurs.
la source
Si vous utilisez gradle, vous pouvez simplement l'ajouter à votre build.gradle
Vous pouvez ensuite exécuter votre application en tapant ./your-app.jar
Vous pouvez également trouver ici un guide complet pour configurer votre application en tant que service
56.1.1 Installation en tant que service init.d (System V)
http://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html
à votre santé
la source
bootRepackage { executable = true }
Voir docs.spring.io/spring-boot/docs/current/reference/html/…Sur le système d'exploitation Windows sans service.
start.bat
stop.bat:
run.bat
la source
Je démarre les applications que je souhaite exécuter de manière persistante ou au moins semi-permanente via screen -dmS NAME / path / to / script. Pour autant que je sache, c'est la solution la plus élégante.
la source
C'est un simple, vous pouvez utiliser le plugin Spring Boot maven pour terminer votre déploiement de code.
la configuration du plugin comme:
Et, le
jvmArtuments
est ajouter pour vous jvm.profiles
choisira un profil pour démarrer votre application.executable
peut faire fonctionner votre application correctement.et si vous ajoutez
mvnw
à votre projet, ou vous avez un enveriment maven. Vous pouvez simplement appeler./mvnw spring-boot:run
pour mvnw oumvn spring-boot:run
pour maven.la source