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>
Versuchen Sie, die Portnummer in application.yaml
(oder application.properties
) in etwas anderes zu ändern.
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>
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
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
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.
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.
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.
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");
}
}
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