it-swarm.com.ru

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

ПОМ:

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

Попробуйте изменить номер порта в application.yaml (или application.properties) на что-то другое.

8
Aziz

Вам нужно добавить зависимость Tomcat в вашу пом

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

Шаг 1

Запустите командную строку от имени администратора. Затем выполните приведенную ниже команду упоминания. введите номер вашего порта в yourPortNumber

netstat -ano | findstr: ваш номер порта

 enter image description here

Обведенная красным кружком область показывает PID (идентификатор процесса)

Шаг 2

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

тасккил/PID типа yourPID здесь/F

 enter image description here

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

2
Hardik

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

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

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

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

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

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

1
Norman Bai

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

1
Jawad Khan

Вам нужно Tomcat Dependency, а также расширить свой класс приложения с помощью extends SpringBootServletInitializer. 

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

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

0
Amos Kosgei