Déployer un WAR Spring Boot sur un serveur Tomcat

1. Introduction

Spring Boot est une convention sur le cadre de configuration qui nous permet de configurer une configuration prête pour la production d'un projet Spring, et Tomcat est l'un des conteneurs de servlets Java les plus populaires.

Par défaut, Spring Boot crée une application Java autonome qui peut s'exécuter en tant qu'application de bureau ou être configurée en tant que service système, mais il existe des environnements dans lesquels nous ne pouvons pas installer un nouveau service ou exécuter l'application manuellement.

Contrairement aux applications autonomes, Tomcat est installé en tant que service capable de gérer plusieurs applications dans le même processus d'application, évitant ainsi la nécessité d'une configuration spécifique pour chaque application.

Dans ce guide, nous allons créer une application Spring Boot simple et l'adapter pour qu'elle fonctionne dans Tomcat.

2. Configuration d'une application Spring Boot

Nous allons configurer une application Web Spring Boot simple à l'aide de l'un des modèles de démarrage disponibles:

 org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE     org.springframework.boot spring-boot-starter-web  

Il n'y a pas besoin de configurations supplémentaires au-delà de la norme @SpringBootApplication puisque Spring Boot prend en charge la configuration par défaut.

Nous ajoutons un simple REST EndPoint pour nous renvoyer du contenu valide:

@RestController public class TomcatController { @GetMapping("/hello") public Collection sayHello() { return IntStream.range(0, 10) .mapToObj(i -> "Hello number " + i) .collect(Collectors.toList()); } }

Maintenant, exécutons l'application avec mvn spring-boot: run et démarrez un navigateur sur // localhost: 8080 / hello pour vérifier les résultats.

3. Création d'un WAR Spring Boot

Les conteneurs de servlets s'attendent à ce que les applications respectent certains contrats à déployer. Pour Tomcat, le contrat est l'API Servlet 3.0.

Pour que notre application respecte ce contrat, nous devons effectuer quelques petites modifications dans le code source.

Tout d'abord, nous devons empaqueter une application WAR au lieu d'un JAR. Pour cela, nous changeons pom.xml avec le contenu suivant:

war

Maintenant, modifions le nom du fichier WAR final pour éviter d'inclure les numéros de version:

 ${artifactId} ... 

Ensuite, nous allons ajouter la dépendance Tomcat:

 org.springframework.boot spring-boot-starter-tomcat provided 

Enfin, nous initialisons le contexte Servlet requis par Tomcat en implémentant l' interface SpringBootServletInitializer :

@SpringBootApplication public class SpringBootTomcatApplication extends SpringBootServletInitializer { }

Pour créer notre application WAR déployable par Tomcat, nous exécutons le package mvn clean. Après cela, notre fichier WAR est généré dans target / spring-boot-tomcat.war (en supposant que le Maven artifactId est «spring-boot-tomcat»).

Nous devons considérer que cette nouvelle configuration fait de notre application Spring Boot une application non autonome (si vous souhaitez qu'elle fonctionne à nouveau en mode autonome, supprimez la portée fournie de la dépendance tomcat).

4. Déploiement du WAR sur Tomcat

Pour que notre fichier WAR soit déployé et exécuté dans Tomcat, nous devons effectuer les étapes suivantes:

  1. Téléchargez Apache Tomcat et décompressez-le dans un dossier tomcat
  2. Copiez notre fichier WAR de target / spring-boot-tomcat.war dans le dossier tomcat / webapps /
  3. Depuis un terminal, accédez au dossier tomcat / bin et exécutez
    1. catalina.bat run (sous Windows)
    2. catalina.sh run (sur les systèmes Unix)
  4. Accédez à // localhost: 8080 / spring-boot-tomcat / hello

Cela a été une configuration Tomcat rapide, veuillez consulter le guide d'installation de Tomcat pour un guide d'installation complet. Il existe également des moyens supplémentaires de déployer un fichier WAR sur Tomcat.

5. Conclusion

Dans ce petit guide, nous avons créé une application Spring Boot simple et l'avons transformée en une application WAR valide déployable sur un serveur Tomcat.

Comme toujours, le code source complet des exemples est disponible à l'adresse over sur GitHub.