Je suis parfaitement capable de configurer Spring Boot dans les deux cas. La question est de savoir lequel d’entre eux est le plus robuste et le plus recommandé, car je n’ai pas trouvé dans la documentation de Spring Boot la méthode recommandée pour le déployer dans un environnement de production. , mes préoccupations concernant l’utilisation du conteneur incorporé sont les suivantes:
La question générale est de savoir quel est le meilleur moyen d'utiliser le fichier jar et de l'exécuter en tant que Java -jar. Jarname.jar en production ou de modifier le conditionnement en war, définissez le Tomcat tel que fourni et définissez la guerre générée dans un Tomcat vide.
J'espère que vous pouvez m'aider.
---MODIFIER---
Plusieurs fois, la réponse dépend, il s’agit d’une application Web normale ou d’un service Web de repos.
jar packaging est parfaitement adapté à la production et vous devriez plutôt vous replier sur war uniquement si vous en avez vraiment besoin - ce qui est souvent le cas lorsque vous ne pouvez pas contrôler votre environnement de déploiement (ce qui est souvent le cas). cas dans les grandes entreprises).
Spring Boot Reference contient un chapitre sur la configuration d’une application Spring Boot en tant que service Unix/Linux/Windows: Installation des applications Spring Boot .
En ce qui concerne votre préoccupation:
Peut-être que dans le futur, j'ai besoin de plus d'applications dans le même conteneur.
Avec les conteneurs intégrés si vous avez besoin de plus d'applications s'exécutant sur la même machine, vous devez démarrer deux applications séparément, chacune fonctionnant sur un port différent. Vous obtiendrez ainsi deux conteneurs en cours d'exécution - ce qui est bien, les applications sont mieux isolées l'une de l'autre.
Il y a environ un mois, la question ressemblait à la vôtre. Permettez-moi de vous faire part de ma conclusion:
1) JAR:
2) GUERRE
Donc, dans ma pratique, utiliser une application de guerre plus facile que jar à gérer et à reconfigurer.
Une raison de plus pour utiliser le fichier "war" dans la production. Springboot a masqué une erreur que Jetty a jetée alors que WAR déployé dans Jetty l’a correctement saisi (bien que le problème ci-dessous soit encore à l’étude).
https://github.com/spring-projects/spring-boot/issues/8917#issuecomment-294673487
Je ne sais pas grand chose au sujet des serveurs, mais ma recommandation est
Si vous utilisez Monolithic application, utilisez plutôt war avec External Tomcat.
Si vous utilisez pour Micro Service applications, utilisez Tomcat intégré Avec un port différent. Et chaque application de service est Indépendante l’une de l’autre.
Je ne connais pas grand chose aux services Windows, mais sous Linux, vous pouvez ajouter l’exécution d’un fichier jar à un script RC (et ainsi faire démarrer l’application à un certain niveau d’exécution). Pour une application de démarrage printanier, il vous suffit de créer un lien symbolique vers le fichier jar et vous pouvez démarrer/arrêter/etc comme tout autre service, voir: Application Spring Boot en tant que service
redémarrer la machine ou la machine virtuelle Java? Un mécanisme d'arrêt est intégré à Spring Boot, il vous suffit de l'activer (et d'activer le mécanisme de sécurité afin que personne ne puisse le faire), voir: Comment arrêter correctement une application Spring Boot?
Spring-Boot active les microservices - l’idée est donc d’avoir un conteneur Webapp intégré pour chaque application Web/microservice. Cela réduit le risque de perdre tous les services quand un seul baisse.
Oui. et vous devez exécuter catalina.sh|bat start
après chaque redémarrage. Ou vous ajoutez un script de démarrage approprié (voir 1.)
Je sens que vous préférez le faire à l'ancienne. Malgré la réponse «question de goût», il existe un argument de poids: la seule dépendance est la machine virtuelle! Le reste (le conteneur d'applications Web, les pilotes de base de données, d'autres bibliothèques) fait partie du paquet que vous livrez. Et si vous décidez de changer de conteneur pour la prochaine version, il en sera de même.