web-dev-qa-db-fra.com

Comment déployer une application Web Spring Boot sur un serveur Tomcat

J'ai créé une application Web Spring Boot, mais je ne parviens pas à déployer le fichier WAR de l'application Web Spring Boot sur Tomcat et je peux l'exécuter en tant qu'application Java. Comment exécuter l'application Spring Boot en tant que Web service sur Tomcat. J'utilise le code suivant. S'il est possible de s'exécuter sur Tomcat, aidez-moi à utiliser les annotations sans utiliser web.xml et avec web.xml.

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
       return application.sources(Application.class);
    }

    public static void main(String[] args) throws Exception {
       SpringApplication.run(Application.class, args);
    }

}

Code suivant pour contrôleur de repos

@RestController
public class HelloWorld{

   @RequestMapping(value = "/hello", method = RequestMethod.GET)
   public ResponseEntity<String> get() {
       return new ResponseEntity<String>("Hello World", HttpStatus.OK);
   }
}

Après Pom.xml j'utilise

<groupId>org.springframework</groupId>
<artifactId>web-service</artifactId>
<version>0.1.0</version>

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

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-Tomcat</artifactId>
        </dependency>

        <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
    </dependency>
        <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
    </dependency>
    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
    </dependency>

</dependencies>

<properties>
    <Java.version>1.6</Java.version>
</properties>


<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

<repositories>
    <repository>
        <id>spring-releases</id>
        <url>https://repo.spring.io/libs-release</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>spring-releases</id>
        <url>https://repo.spring.io/libs-release</url>
    </pluginRepository>
</pluginRepositories>
<packaging>war</packaging>
25
satish

Voici deux bonnes documentations sur la façon de déployer le Spring Boot App en tant que fichier war.

Vous pouvez suivre ce démarrage printanier howto-traditional-deployment documentation -

Étapes selon cette documentation -

  1. Vous mettez à jour la classe principale de votre application pour étendre SpringBootServletInitializer.

  2. L'étape suivante consiste à mettre à jour votre configuration de génération afin que votre projet génère un fichier war plutôt qu'un fichier jar. <packaging>war</packaging>

  3. Marquez la dépendance du conteneur de servlet intégré comme fourni.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-Tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    

et une autre manière -

Voir ceci documentation Spring io qui explique comment déployer l'application Spring Boot sur un serveur d'applications.

Pas -

  1. Remplacez jar packaging par war.

  2. Commentez la déclaration de la spring-boot-maven-plugin _ plugin dans votre pom.xml

  3. Ajoutez un point d’entrée Web dans votre application en développant SpringBootServletInitializer et en remplaçant la méthode configure.

  4. Retirer le spring-boot-starter-Tomcat dependency et modfiy votre spring-boot-starter-web dépendance à

<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>

Dans votre pom.xml, retirer spring-beans et spring-webmvc dépendances. Le spring-boot-starter-web dépendance dépendra de ces dépendances.

32
Omkar

Spring Boot permet de déployer l’application en tant que fichier war traditionnel dans servlet 3.x _ ( sans web.xml ) prenant en charge le serveur Tomcat.Veuillez consulter documentation de démarrage printanier pour cela. Je vais vous expliquer ce que vous devez faire ici.

étape 1 : modifiez pom.xml pour changer l'emballage en war: (ce que vous avez déjà fait)

<packaging>war</packaging>

étape 2 : changez votre dépendance

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-Tomcat</artifactId>
   </dependency>

à

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-Tomcat</artifactId>
      <scope>provided</scope>
</dependency>

étape 3 : modifiez votre nom de guerre (si vous devez éviter les détails de version ajoutés au nom de guerre) dans pom.xml en dessous de <build> tag.

<build>
    <finalName>web-service</finalName>
.....

étape 4 : lancez maven build pour créer war: clean install étape 5: déployer le fichier war généré web-service.war dans Tomcat et demande l’URL dans le navigateur http://<Tomcat ip>:<Tomcat port>/web-service/hello

Tu devrais obtenir Hello World.

Remarque: Vous pouvez également supprimer les dépendances redondantes, comme @ALi Dehghani.

12
Tom Sebastian

Marque le spring-boot-starter-Tomcat _ dépendance comme provided, comme:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-Tomcat</artifactId>
            <scope>provided</scope>
</dependency>

Note1: Supprimez les dépendances redondantes de votre pom.xml comme:

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
</dependency>
<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
</dependency>

Ils font partie de paquets de démarrage de démarrage de printemps

Note2: Faites le pot pas la guerre

4
Ali Dehghani

J'ai été confronté à ce problème. Une bonne partie de ce qui précède est un bon conseil. Mon problème était de déployer sur le serveur Pivotal TC au début.

  1. Faites de l'emballage dans le pom un WAR.

    <packaging>war</packaging>
    
  2. Ajouter des dépendances au pom

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-Tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    
  3. J'ai utilisé une classe d'application pour contenir le main (). Main avait un code de configuration pour que EntityManager etc puisse être injecté. Cette EntityManager a utilisé les informations des fichiers ApplicationContext et persistence.xml Pour les informations de persistance. Fonctionne bien sous SpringBoot mais pas sous Tomcat. En fait, sous Tomcat, la Main() n'est pas appelée. La classe Application étend SpringBootServletInitializer.

  4. La méthode suivante est ajoutée à la classe Application:

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        Application obj = new Application();
        @SuppressWarnings("resource")
        ConfigurableApplicationContext applicationContext = 
             new ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml");
         applicationContext.registerShutdownHook();
         applicationContext.getBeanFactory().autowireBeanProperties(
             obj, AutowireCapableBeanFactory.AUTOWIRE_NO, false);
        return application.sources(Application.class);
    }
    

Seule la dernière ligne est requise - l'autre code était précédemment contenu dans main() et a été déplacé ici pour obtenir l'injection de EntityManager qui fonctionne.

  1. Les annotations nécessaires sont:

    @EnableAutoConfiguration
    @ComponentScan
    //@SpringBootApplication will consist of both of these and @Configuration
    
  2. Certaines URL peuvent maintenant avoir besoin de changer le contexte racine pour inclure

    <artifactId>contextname</artifactId>.
    

J'espère que ça t'as aidé

0
Ged

Le processus de conversion d'un fichier de démarrage de printemps en guerre de démarrage de printemps est décrit à l'adresse suivante: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build -tool-plugins-maven-packaging En résumé, définissez votre classe de départ de la même manière que dans votre exemple, puis basculez l'emballage de jar en guerre dans le fichier .pom. De plus, vous devez définir la dépendance fournie Spring-Boot-Starter-Tomcat. Encore une fois, le processus est documenté dans sa forme complète au lien ci-dessus. Des informations complémentaires sur ce sujet sont disponibles dans le printemps io Guide, "Conversion d'une application JAR de démarrage Spring en un fichier WAR", disponible à l'adresse https://spring.io/guides/gs/convert. -jar-to-war/ Si je peux vous aider, faites le moi savoir et je vous aiderai.

0
Wheelchair Geek