web-dev-qa-db-fra.com

Spring Boot: impossible de démarrer le conteneur de servlets Tomcat intégré

Je suis nouveau dans Spring Boot et je rencontre une erreur en exécutant mon application ..__ Je suis un tutoriel et je crois avoir un parent et des dépendances appropriés avec POM, aidez-moi s'il vous plaît 

classe principale:

package com.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * Hello world!
 *
 */

@SpringBootApplication
public class App 
{
    public static void main( String[] args )
    {
        SpringApplication.run(App.class, "hello");
    }
}

l'erreur est:

   org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat servlet container
        at org.springframework.boot.context.embedded.Tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.Java:165) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.Java:293) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.Java:141) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:541) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE]
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.Java:118) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.Java:764) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
        at org.springframework.boot.SpringApplication.doRun(SpringApplication.Java:357) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.Java:305) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1124) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1113) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
        at com.boot.App.main(App.Java:18) [classes/:na]Caused by: Java.lang.IllegalStateException: Tomcat connector in failed state
        at org.springframework.boot.context.embedded.Tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.Java:159) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
        ... 10 common frames omitted

POM:

    <project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>

  <groupId>com.boot</groupId>
  <artifactId>das-boot</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.1.RELEASE</version>
    </parent>
  <name>das-boot</name>
  <url>http://maven.Apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
  <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
14
amar

Essayez de remplacer le numéro de port dans application.yaml (ou application.properties) par autre chose.

8
Aziz

Vous devez ajouter la dépendance Tomcat dans votre pom

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

Étape 1

Exécutez la ligne de commande en tant qu'administrateur. Ensuite, exécutez la commande ci-dessous mention. tapez votre numéro de port dans votre numéro de port

netstat -ano | findstr: yourPortNumber

 enter image description here

La zone entourée de rouge indique le PID (identificateur de processus)

Étape 2

Ensuite, vous exécutez cette commande après avoir identifié le PID.

type de tâche/type de PIDauprès de PIDhere/F

 enter image description here

P.S. Exécutez à nouveau la première commande pour vérifier si le processus est toujours disponible ou non. Vous obtiendrez une ligne vide si le processus est terminé avec succès.

2
Hardik

Dans mon état, une exception "Impossible de démarrer le conteneur de servlets Tomcat intégré" a été générée.

J'ai ouvert le mode de débogage de Spring Boot en ajoutant debug=true dans le fichier application.properties,

puis relancez le code et il m'a dit que Java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String

Ainsi, nous savons que j’utilise probablement une API de servlet de version inférieure, qui entre en conflit avec la version de démarrage printanière.

Je suis allé à mon pom.xml et j'ai trouvé qu'une de mes dépendances utilisait servlet2.5, Et je l'ai exclue.

Maintenant ça marche. J'espère que ça aide.

1
Norman Bai

Pour moi, il me suffisait de mettre un drapeau -X avec mvn. Regardez le journal de débogage. Il y avait un problème avec Spring lors de la localisation du fichier .properties.

1
Jawad Khan

Vous devez utiliser Tomcat Dependency et également étendre votre classe d'application à partir de l'extension SpringBootServletInitializer. 

@SpringBootApplication  
public class App extend SpringBootServletInitializer
{
    public static void main( String[] args )
    {
        SpringApplication.run(App.class, "hello");
    }
}
0
Chids

Une façon simple de gérer cela consiste à l'inclure dans votre fichier application.properties ou .yml: server.port=0 pour application.properties et server.port: 0 pour les fichiers application.yml. Bien sûr, vous devez être conscient que ceux-ci peuvent changer en fonction de la version de springboot que vous utilisez .Cela permettra à votre machine d'allouer de manière dynamique tout port disponible disponible pour utilisation . Pour affecter un port de manière statique, remplacez ce qui précède par server.port = someportnumber. Si vous utilisez un système d'exploitation basé sur Unix, vous voudrez peut-être vérifier les activités de zombies sur le port en question et si possible le tuer à l'aide de fuser -k {theport}/tcp. Votre .yml ou .properties devrait ressembler à ceci: . server: port: 8089 servlet: context-path: /somecontextpath

0
Amos Kosgei