web-dev-qa-db-fra.com

Application de démarrage Spring vs fichier .war déployé sur Tomcat/Jetty

Dans mon cas, considérons un service RESTful simple créé et configuré avec Spring Boot. Ce service communique avec une base de données (par exemple, Postgres). 

Quelle est la différence entre:

  • Construire un fichier Spring Boot .jar et l’exécuter sur mon hôte public distant via Java -jar myservice.jar?

ou

  • Compressez-le dans le fichier .war et déployez-le sur Tomcat/Jetty?

La première option semble être beaucoup plus facile, vous devez juste exécuter un .jar. Dans la deuxième option, vous devez créer une instance Tomcat, l'exécuter puis déployer un fichier .war . Y a-t-il une autre différence? Des avantages et des inconvénients des deux méthodes?

16
ilovkatie

Compressez-le dans un fichier .war et déployez-le sur Tomcat/Jetty?

Ne fais cela si possible. Reason : avec Tomcat intégré (ou tout autre serveur d’exécution tel que le ressac, la jetée, la jetée, etc.), il est beaucoup plus facile de créer une architecture de micro-services.

Comme Josh Long l’a déjà dit dans l’un de ses entretiens du printemps IO “make Jar, not War”

D'autre part, si vous avez une infrastructure existante avec des conteneurs de servlets et que plusieurs applications.wars s'exécutent déjà dans ces conteneurs de servlets, il vous suffit de conditionner votre application dans un fichier war et de la remettre à une équipe de publication (ou plutôt vous êtes obligé de simplement réutiliser l'infrastructure existante), alors c'est une autre histoire ... Mais le monde de la technologie s'éloigne déjà de cette pratique.

Encore une fois, dans l’esprit des microservices, dans l’esprit de ce à quoi Spring Boot est destiné, je vous encourage à utiliser un serveur intégré et à créer un fichier jar exécutable plutôt que de procéder au déploiement traditionnel.

Modifier

Si vous dockez votre application, vous avez deux options pour empaqueter votre Tomcat dans votre "artefact final" (par "artefact final", je voulais dire une image docker, pas le pot. Jar est simplement un artefact intermédiaire).

  1. Utilisez Tomcat intégré pour que Tomcat soit emballé dans votre fichier jar et utilisez une image du menu fixe JVM.

OU 

  1. Excluez Tomcat de votre pot et compressez simplement votre application et utilisez une image Tomcat Docker.

Néanmoins, chaque jour, je choisirais la première option, car cela rend le processus de développement beaucoup plus facile (et cela ne va pas sans dire que l’intégration d’un nouveau développeur sera plus facile).

17
so-random-dude

Comme décrit sur la page du produit , ces fichiers jar incluent le conteneur de servlet et le démarreront directement.

Intégrez directement Tomcat, Jetty ou Undertow (pas besoin de déployer des fichiers WAR)

Si vous envisagez d'exécuter votre application sur un hôte sans rien d'autre à côté (docker?), Cela pourrait être une bonne possibilité. Si votre hôte contient d'autres applications, l'approche de déploiement des guerres serait plus intéressante, car vous ne pouvez utiliser que ces conteneurs de servlets. une fois sur votre hôte.

1
dahrens