Весенняя загрузка: невозможно запустить встроенный контейнер сервлетов 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) на что-то другое.

Ответ 2

Вы должны добавить tomcat dependecy в свой pom

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

Ответ 3

Шаг 1

Запустите командную строку в качестве администратора. Затем запустите следующую команду. введите номер своего порта в свой номер порта

netstat -ano | findstr: yourPortNumber

enter image description here

Область красного цвета, окрашенная в красный цвет, показывает PID (идентификатор процесса)

Шаг 2

Затем вы выполните эту команду после идентификации PID.

taskkill/PID typeyourPIDhere/F

enter image description here

PS Выполните первую команду еще раз, чтобы проверить, доступен ли процесс или нет. Если процесс успешно завершен, вы получите пустую строку.

Ответ 4

В моем состоянии, когда я получил исключение "Не удалось запустить встроенный контейнер сервлетов Tomcat",

Я открыл режим отладки весенней загрузки, добавив debug=true в application.properties,

а затем повторить код, и он сказал мне, что java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String

Таким образом, мы знаем, что, возможно, я использую API-интерфейс сервлета более низкой версии, и он конфликтует с весенней версией загрузки.

Я пошел в свой pom.xml и нашел, что одна из моих зависимостей использует servlet2.5, и я исключил его.

Теперь это работает. Надеюсь, поможет.

Ответ 5

Вам необходимо установить Tomcat Dependency, а также расширить класс Application из расширений SpringBootServletInitializer

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

Ответ 6

Для меня мне просто нужно было установить флаг -X с mvn. Посмотрите журнал отладки; возникла проблема с Spring при поиске файла.properties.

Ответ 7

Простой способ справиться с этим заключается в том, чтобы включить это в ваши приложения.properties или.yml файл: server.port=0 для application.properties и server.port: 0 для файлов application.yml. Конечно, нужно знать, что они могут измениться в зависимости от используемой вами версии springboot. Это позволит вашему компьютеру динамически распределять любой свободный порт, доступный для использования. Чтобы статически назначить изменение порта выше на server.port = someportnumber. Если вы используете ОС на основе UNIX, вы можете проверить активность зомби в соответствующем порту и, если возможно, убить его с помощью fuser -k {theport}/tcp. Ваши.yml или.properties должны выглядеть так. server: port: 8089 servlet: context-path: /somecontextpath