web-dev-qa-db-ja.com

Spring boot:埋め込みTomcatサーブレットコンテナを開始できません

私はSpring Bootを初めて使用し、アプリケーションの実行中にエラーが発生します。私はチュートリアルに従っていますが、POMで適切な親と依存関係を持っていると信じています、助けてください

メインクラス:

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

エラー:

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

application.yaml(またはapplication.properties)のポート番号を別のものに変更してください。

12
Aziz

TomcatにTomcat依存関係を追加する必要があります

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

ステップ1

管理者としてコマンドラインを実行します。次に、下記のコマンドを実行します。 yourPortNumberにポート番号を入力します

netstat -ano | findstr:yourPortNumber

enter image description here

赤い丸で囲まれた領域は、PID(プロセス識別子)を示しています

ステップ2

次に、PIDを識別した後にこのコマンドを実行します。

taskkill/PID typeyourPIDhere/F

enter image description here

追伸最初のコマンドを再度実行して、プロセスがまだ使用可能かどうかを確認します。プロセスが正常に終了すると、空の行が表示されます。

2
Hardik

「埋め込みTomcatサーブレットコンテナを起動できません」という例外が発生した私の状態では、

Application.propertiesにdebug=trueを追加して、スプリングブートのデバッグモードを開きました。

その後、コードを再実行すると、Java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String

したがって、おそらく私は下位バージョンのサーブレットAPIを使用していることを知っており、それはスプリングブートバージョンと競合します。

Pom.xmlにアクセスしましたが、依存関係の1つがservlet2.5を使用していることがわかったため、除外しました。

今では動作します。それが役に立てば幸い。

1
Norman Bai

私にとっては、mvnとともに-Xフラグを付けるだけでした。デバッグログを見てください。 .propertiesファイルの検索中にSpringで問題が発生しました。

1
Jawad Khan

Tomcat依存関係と、SpringBootServletInitializerの拡張からアプリケーションクラスを拡張する必要があります。

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

これを処理する簡単な方法は、これをapplication.propertiesまたは.ymlファイルに含めることです。application.propertiesの場合はserver.port=0、application.ymlファイルの場合はserver.port: 0です。もちろん、これらは使用しているスプリングブートのバージョンによって変わる可能性があることに注意する必要があります。これらにより、マシンは使用可能な空きポートを動的に割り当てることができます。ポートを静的に割り当てるには、上記をserver.port = someportnumberに変更します。 UNIXベースのOSを実行している場合、問題のポートでゾンビアクティビティをチェックし、可能であればfuser -k {theport}/tcpを使用して強制終了します。 .ymlまたは.propertiesは次のようになります。 server: port: 8089 servlet: context-path: /somecontextpath

0
Amos Kosgei