wake-up-neo.com

Spring Boot: Der eingebettete Tomcat-Servlet-Container kann nicht gestartet werden

Ich bin neu bei Spring Boot und habe Fehler beim Ausführen meiner Anwendung ... Ich folge einem Tutorial und glaube, ich habe richtige Eltern und Abhängigkeiten mit POM, bitte helfen Sie mir 

hauptklasse:

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");
    }
}

fehler ist:

   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

Versuchen Sie, die Portnummer in application.yaml (oder application.properties) in etwas anderes zu ändern.

8
Aziz

Sie müssen die Tomcat-Abhängigkeit in Ihrem Pom hinzufügen

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

Schritt 1

Führen Sie die Befehlszeile als Administrator aus. Führen Sie dann den unten genannten Befehl aus. Geben Sie Ihre Portnummer in IhrePortnummer ein

netstat -ano | findstr: IhrePortNr

 enter image description here

Rot umrandete Fläche zeigt die PID (Prozesskennung)

Schritt 2

Dann führen Sie diesen Befehl aus, nachdem Sie die PID identifiziert haben.

taskkill/PID typeyourPIDhere/F

 enter image description here

P.S. Führen Sie den ersten Befehl erneut aus, um zu überprüfen, ob der Prozess noch verfügbar ist oder nicht. Sie erhalten eine leere Zeile, wenn der Prozess erfolgreich beendet wurde.

2
Hardik

In meinem Zustand, als ich eine Ausnahme bekam "Der eingebettete Tomcat-Servlet-Container kann nicht gestartet werden",

Ich habe den Debug-Modus von Spring Boot durch Öffnen von debug=true in der application.properties geöffnet.

und dann den Code erneut ausführen, und er sagte mir, dass Java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String

Wir wissen also, dass ich wahrscheinlich eine Servlet-API einer niedrigeren Version verwende, und dies steht in Konflikt mit der Spring-Boot-Version.

Ich ging zu meinem pom.xml und fand heraus, dass eine meiner Abhängigkeiten Servlet2.5, Verwendet, und ich habe es ausgeschlossen.

Jetzt gehts. Ich hoffe es hilft.

1
Norman Bai

Für mich musste ich nur ein -X-Flag mit mvn setzen. Schauen Sie sich das Debug-Protokoll an. Es gab ein Problem mit Spring beim Suchen der .properties-Datei.

1
Jawad Khan

Sie müssen Tomcat Dependency verwenden und auch Ihre Anwendungsklasse von SpringBootServletInitializer erweitern 

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

Dies können Sie ganz einfach in Ihre application.properties- oder .yml-Datei aufnehmen: server.port=0 für application.properties und server.port: 0 für application.yml-Dateien. Natürlich müssen Sie sich darüber im Klaren sein, dass sich diese je nach der verwendeten Springboot-Version ändern können . Dadurch kann Ihr Computer jeden verfügbaren freien Port dynamisch zuweisen Um einen Port statisch zuzuweisen, ändern Sie den obigen Wert in server.port = someportnumber. Wenn Sie ein auf Unix basierendes Betriebssystem ausführen, möchten Sie möglicherweise nach Zombie-Aktivitäten für den betreffenden Port suchen und ihn nach Möglichkeit mit fuser -k {theport}/tcp..__ abbrechen. Ihre .yml- oder .properties-Datei sollte folgendermaßen aussehen . server: port: 8089 servlet: context-path: /somecontextpath

0
Amos Kosgei