[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.application.yaml (또는 application.properties)의 포트 번호를 다른 것으로 변경하십시오.
application.yaml (또는 application.properties)의 포트 번호를 다른 것으로 변경하십시오.
-
==============================
2.당신은 pom에 tomcat 의존성을 추가해야합니다.
당신은 pom에 tomcat 의존성을 추가해야합니다.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency>
-
==============================
3.1 단계
1 단계
명령 줄을 관리자 권한으로 실행하십시오. 그런 다음 아래의 언급 명령을 실행하십시오. 포트 번호에 포트 번호를 입력하십시오.
netstat -ano | findstr : yourPortNumber
붉은 색으로 표시된 부분은 PID (프로세스 식별자)
2 단계
그런 다음 PID를 식별 한 후에이 명령을 실행합니다.
taskkill / PID 유형 youPIDhere / F
추신 첫 번째 명령을 다시 실행하여 프로세스가 여전히 사용 가능한지 확인하십시오. 프로세스가 성공적으로 끝나면 빈 줄이 생깁니다.
-
==============================
4.내 조건에서 "Tomcat 서블릿 컨테이너를 임베드 할 수 없습니다"예외가 발생했습니다.
내 조건에서 "Tomcat 서블릿 컨테이너를 임베드 할 수 없습니다"예외가 발생했습니다.
application.properties에 debug = true를 추가하여 스프링 부트의 디버그 모드를 열었습니다.
그런 다음 코드를 다시 실행하면 java.lang.NoSuchMethodError : javax.servlet.ServletContext.getVirtualServerName () Ljava / lang / String
따라서 우리는 아마도 하위 버전의 서블릿 API를 사용하고 있으며 스프링 부트 버전과 충돌합니다.
내 pom.xml에 갔다가 내 종속성 중 하나가 servlet2.5를 사용하고 있음을 발견했습니다. 나는 그것을 제외시켰다.
이제 작동합니다. 희망이 도움이됩니다.
-
==============================
5.나를 위해, 나는 방금 mvn에 -X 플래그를 두어야 만했다. 디버그 로그를보십시오. .properties 파일을 찾는 동안 Spring에 문제가 발생했습니다.
나를 위해, 나는 방금 mvn에 -X 플래그를 두어야 만했다. 디버그 로그를보십시오. .properties 파일을 찾는 동안 Spring에 문제가 발생했습니다.
-
==============================
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.이를 처리하는 간단한 방법은 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
from https://stackoverflow.com/questions/43579432/spring-boot-unable-to-start-embedded-tomcat-servlet-container by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 클래스 패스가 아닌 의존성의 테스트 리소스? (0) | 2019.03.25 |
---|---|
[SPRING] 동일한 URI에 대한 다중 요청을 처리하는 Spring MockRestServiceServer (자동 발견) (0) | 2019.03.25 |
[SPRING] Spring + Hibernate, 최대 절전 모드 DAO로 sessionFactory 자동로드 (0) | 2019.03.25 |
[SPRING] 스프링 부트는 webapp 폴더 대신 JSP 템플릿을 사용하여 리소스 템플릿 폴더를 사용합니까? (0) | 2019.03.25 |
[SPRING] Spring 3 / Thymeleaf에서 매개 변수를 사용하여 현지화 메시지를 표시하는 방법 (0) | 2019.03.25 |