Maison  >  Article  >  Java  >  Comment intégrer SpringBoot dans un package war pour l'exécuter sous Tomcat ou Wildfly

Comment intégrer SpringBoot dans un package war pour l'exécuter sous Tomcat ou Wildfly

WBOY
WBOYavant
2023-05-10 17:04:061517parcourir

La méthode d'empaquetage par défaut de Springboot est le package jar. L'avantage du package jar est que la configuration n'a pas besoin d'être modifiée et que Tomcat est intégré dans un package jar, il peut être directement lancé dans Docker pour être exécuté. essais. Cependant, étant donné que le code frontal ne peut être regroupé que dans un package war, il suffit de regrouper le code back-end dans un package war et de l'exécuter avec le code frontal dans les applications Web du conteneur Tomcat.

Formulaire de packaging SpringBoot

Par défaut, le projet SpringBoot créé est conditionné sous la forme d'un package jar. Dans le même temps, un conteneur Tomcat est intégré.

Donc, si vous souhaitez intégrer Springboot dans un package war et le déployer sur un conteneur tel que Wildfly, que devez-vous faire ?

Ce qui suit expliquera chaque étape à partir de la création d'un projet.

Créer un projet

Il n'y a aucune difficulté à créer un projet. Utilisez simplement l'outil idea pour créer un projet maven simple. Si votre projet est déjà un projet springboot et que vous souhaitez le modifier en un package war, il suffit de le modifier. modifiez-le.

Modifier la configuration pom.xml

Après avoir créé le projet, modifiez le fichier pom.xml et ajoutez la balise parent.

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.1.5.RELEASE</version>
  <relativePath/>
</parent>

S'il s'agissait à l'origine d'un projet springboot, il est déjà inclus et pas besoin de le modifier.

Définissez la méthode d'emballage dans pom.xml sur war.

<packaging>war</packaging>

Ajoutez ou modifiez la configuration des dépendances comme suit :

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
      <exclusion>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies>

Parmi eux, la dépendance tomcat doit être exclue dans spring-boot-starter-web. En même temps, ajoutez la dépendance de servlet-api. Notez que la dépendance ajoutée ici est Servlet2.5.

Utilisez les plug-ins suivants dans la construction pour l'empaquetage.

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>2.6</version>
      <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
      </configuration>
    </plugin>
  </plugins>
</build>

Démarrez la méthode principale

S'il existe déjà une méthode principale à démarrer, laissez la méthode principale hériter de SpringBootServletInitializer et implémenter sa méthode. S'il s'agit d'un projet nouvellement créé, créez SpringBootApp (classe de démarrage) directement dans le répertoire de niveau supérieur, puis démarrez diam comme suit.

@SpringBootApplication
public class SpringBootApp extends SpringBootServletInitializer {
 public static void main(String[] args) {
 SpringApplication.run(SpringBootApp.class, args);
 }
 @Override
 protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
 return builder.sources(SpringBootApp.class);
 }
}

Packaging

Exécutez simplement le packaging du package via la commande maven, et le package war peut être généré dans le répertoire cible.

Quant au déploiement de tomcat et wildfly, vous pouvez placer le package war dans le répertoire correspondant et démarrer le service.

Exceptions

Si une exception similaire à la suivante se produit lors du démarrage (suggérant que web.xml est manquant) :

Erreur lors de l'assemblage de WAR : l'attribut webxml est requis (ou un WEB-INF/web.xml préexistant si exécution en mode mise à jour)

Faites attention à vérifier le plug-in d'empaquetage du fichier pom et si les problèmes de Tomcat ont été éliminés, et vérifiez si le plug-in d'empaquetage ci-dessus est correct.

La raison du problème est la suivante : le package de dépendances spring-boot-starter-web est référencé dans le projet springboot. Le spring-boot-starter-tomcat référencé dans ce package contient le conteneur de servlet intégré Tomcat et ses différentes versions implémentent différentes spécifications de version de servlet.

Servlet/JSP version 2.5/2.1 prend en charge la version 6.0.x de Tomcat et la version minimale de Java est 1.5. Servlet/JSP version 3.0/2.2 prend en charge Tomcat version 7.0.x et la version Java minimale est 1.6.

Étant donné que Servlet2.5 est utilisé ci-dessus, l'exception ci-dessus se produira lorsqu'il n'y a pas de fichier web.xml.

Solution 1 : Lorsque la version du Servlet est inférieure à 3, utilisez le fichier /src/main/webapp/WEB-INF/web.xml pour créer.

Solution 2 : Ajoutez le plugin maven-war-plugin sous la build de pom.xml. Et définissez failOnMissingWebXml sur false.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer