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>
Essayez de remplacer le numéro de port dans application.yaml
(ou application.properties
) par autre chose.
Vous devez ajouter la dépendance Tomcat dans votre pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
</dependency>
É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
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
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.
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.
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.
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");
}
}
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