Ответ 1
Попробуйте изменить номер порта в application.yaml
(или application.properties
) на что-то другое.
Я новичок в 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>
Попробуйте изменить номер порта в application.yaml
(или application.properties
) на что-то другое.
Вы должны добавить tomcat dependecy в свой pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
Шаг 1
Запустите командную строку в качестве администратора. Затем запустите следующую команду. введите номер своего порта в свой номер порта
netstat -ano | findstr: yourPortNumber
Область красного цвета, окрашенная в красный цвет, показывает PID (идентификатор процесса)
Шаг 2
Затем вы выполните эту команду после идентификации PID.
taskkill/PID typeyourPIDhere/F
PS Выполните первую команду еще раз, чтобы проверить, доступен ли процесс или нет. Если процесс успешно завершен, вы получите пустую строку.
В моем состоянии, когда я получил исключение "Не удалось запустить встроенный контейнер сервлетов Tomcat",
Я открыл режим отладки весенней загрузки, добавив debug=true
в application.properties,
а затем повторить код, и он сказал мне, что java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String
Таким образом, мы знаем, что, возможно, я использую API-интерфейс сервлета более низкой версии, и он конфликтует с весенней версией загрузки.
Я пошел в свой pom.xml и нашел, что одна из моих зависимостей использует servlet2.5, и я исключил его.
Теперь это работает. Надеюсь, поможет.
Вам необходимо установить Tomcat Dependency, а также расширить класс Application из расширений SpringBootServletInitializer
@SpringBootApplication
public class App extend SpringBootServletInitializer
{
public static void main( String[] args )
{
SpringApplication.run(App.class, "hello");
}
}
Для меня мне просто нужно было установить флаг -X с mvn
. Посмотрите журнал отладки; возникла проблема с Spring при поиске файла.properties.
Простой способ справиться с этим заключается в том, чтобы включить это в ваши приложения.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