복붙노트

[SPRING] 스프링 부트 : 임베디드 Tomcat 서블릿 컨테이너를 시작할 수 없습니다.

SPRING

스프링 부트 : 임베디드 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>

해결법

  1. ==============================

    1.application.yaml (또는 application.properties)의 포트 번호를 다른 것으로 변경하십시오.

    application.yaml (또는 application.properties)의 포트 번호를 다른 것으로 변경하십시오.

  2. ==============================

    2.당신은 pom에 tomcat 의존성을 추가해야합니다.

    당신은 pom에 tomcat 의존성을 추가해야합니다.

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>
    
  3. ==============================

    3.1 단계

    1 단계

    명령 줄을 관리자 권한으로 실행하십시오. 그런 다음 아래의 언급 명령을 실행하십시오. 포트 번호에 포트 번호를 입력하십시오.

    netstat -ano | findstr : yourPortNumber

    붉은 색으로 표시된 부분은 PID (프로세스 식별자)

    2 단계

    그런 다음 PID를 식별 한 후에이 명령을 실행합니다.

    taskkill / PID 유형 youPIDhere / F

    추신 첫 번째 명령을 다시 실행하여 프로세스가 여전히 사용 가능한지 확인하십시오. 프로세스가 성공적으로 끝나면 빈 줄이 생깁니다.

  4. ==============================

    4.내 조건에서 "Tomcat 서블릿 컨테이너를 임베드 할 수 없습니다"예외가 발생했습니다.

    내 조건에서 "Tomcat 서블릿 컨테이너를 임베드 할 수 없습니다"예외가 발생했습니다.

    application.properties에 debug = true를 추가하여 스프링 부트의 디버그 모드를 열었습니다.

    그런 다음 코드를 다시 실행하면 java.lang.NoSuchMethodError : javax.servlet.ServletContext.getVirtualServerName () Ljava / lang / String

    따라서 우리는 아마도 하위 버전의 서블릿 API를 사용하고 있으며 스프링 부트 버전과 충돌합니다.

    내 pom.xml에 갔다가 내 종속성 중 하나가 servlet2.5를 사용하고 있음을 발견했습니다. 나는 그것을 제외시켰다.

    이제 작동합니다. 희망이 도움이됩니다.

  5. ==============================

    5.나를 위해, 나는 방금 mvn에 -X 플래그를 두어야 만했다. 디버그 로그를보십시오. .properties 파일을 찾는 동안 Spring에 문제가 발생했습니다.

    나를 위해, 나는 방금 mvn에 -X 플래그를 두어야 만했다. 디버그 로그를보십시오. .properties 파일을 찾는 동안 Spring에 문제가 발생했습니다.

  6. ==============================

    6.Tomcat Dependency가 필요하고 SpringBootServletInitializer에서 Application Class를 확장해야합니다.

    Tomcat Dependency가 필요하고 SpringBootServletInitializer에서 Application Class를 확장해야합니다.

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

    7.이를 처리하는 간단한 방법은 application.properties 또는 .yml 파일에 다음을 포함시키는 것입니다. application.properties의 경우 server.port = 0이고 application.yml 파일의 경우 server.port : 0입니다. 물론 이들이 사용하는 springboot 버전에 따라 변경 될 수 있음을 알아야합니다. 이것들은 여러분의 머신이 사용 가능한 무료 포트를 동적으로 할당 할 수있게 해줍니다. 정적으로 포트를 지정하려면 위의 내용을 server.port = someportnumber로 변경하십시오. 유닉스 기반 OS를 사용하고 있다면 문제의 포트에서 좀비 활동을 확인하고 가능한 경우 fuser -k {theport} / tcp를 사용하여 죽일 수 있습니다. .yml 또는 .properties는 다음과 같아야합니다. 섬기는 사람:   포트 : 8089   서블릿 :     context-path : / somecontextpath

    이를 처리하는 간단한 방법은 application.properties 또는 .yml 파일에 다음을 포함시키는 것입니다. application.properties의 경우 server.port = 0이고 application.yml 파일의 경우 server.port : 0입니다. 물론 이들이 사용하는 springboot 버전에 따라 변경 될 수 있음을 알아야합니다. 이것들은 여러분의 머신이 사용 가능한 무료 포트를 동적으로 할당 할 수있게 해줍니다. 정적으로 포트를 지정하려면 위의 내용을 server.port = someportnumber로 변경하십시오. 유닉스 기반 OS를 사용하고 있다면 문제의 포트에서 좀비 활동을 확인하고 가능한 경우 fuser -k {theport} / tcp를 사용하여 죽일 수 있습니다. .yml 또는 .properties는 다음과 같아야합니다. 섬기는 사람:   포트 : 8089   서블릿 :     context-path : / somecontextpath

  8. from https://stackoverflow.com/questions/43579432/spring-boot-unable-to-start-embedded-tomcat-servlet-container by cc-by-sa and MIT license