ApplicationContextException: невозможно запустить ServletWebServerApplicationContext из-за отсутствия компонента ServletWebServerFactory

Я написал весеннее пакетное приложение, используя Spring boot. Когда я пытаюсь запустить это приложение с помощью командной строки и classpath в моей локальной системе, он работает нормально. Однако, когда я пытался запустить его на сервере linux, он дает мне следующее исключение

Unable to start web server; nested exception is
org.springframework.context.ApplicationContextException: 
Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.

Ниже приводится способ, которым я запускаю его:

java -cp jarFileName.jar; lib\* -Dlogging.level.org.springframework=DEBUG -Dspring.profiles.active=dev -Dspring.batch.job.names=abcBatchJob com.aa.bb.StartSpringBatch > somelogs.log

Ответы

Ответ 1

Решение:

Я явно устанавливаю свойство below в none в файле application.yml.

spring:
  main:
    web-application-type: none

Ответ 2

Для не веб-приложений отключите web application type в файле свойств:

В application.properties:

spring.main.web-application-type=none

Если вы используете application.yml то добавьте:

  spring:
    main:
      web-application-type: none

Для веб-приложений расширяет *SpringBootServletInitializer* в основном классе.

@SpringBootApplication
public class YourAppliationName extends SpringBootServletInitializer{
    public static void main(String[] args) {
        SpringApplication.run(YourAppliationName.class, args);
    }
}

Ответ 3

Возможно, вы пропустили @SpringBootApplication в своем классе начальной загрузки.

@SpringBootApplication
public class LoginSecurityAppApplication {

    public static void main(String[] args) {
        SpringApplication.run(LoginSecurityAppApplication.class, args);
    }

}

Ответ 4

У меня была эта проблема при переходе на Spring Boot. Я нашел совет, чтобы удалить зависимости, и это помогло. Итак, я удалил зависимость для проекта jsp-api. Кроме того, зависимость servlet-api также должна быть удалена.

compileOnly group: 'javax.servlet.jsp', name: 'jsp-api', version: '2.2' 

Ответ 5

Обновление родительского родителя-стартера в pom.xml до последней версии исправил его для меня.

Ответ 6

Класс аннотации с 'public static void main', например: @SpringBootApplication

Ответ 7

Вы, вероятно, используете это в своем проекте:

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

в этом случае вам также нужно добавить:

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

и волшебство случается :)

Ответ 8

Я столкнулся с этой проблемой, когда пытался запустить свое веб-приложение в виде толстой фляги, а не изнутри моей IDE (IntelliJ).

Это то, что сработало для меня. Просто добавьте профиль по умолчанию в файл application.properties.

spring.profiles.active=default

Вам не нужно использовать значение по умолчанию, если вы уже настроили другие конкретные профили (dev/test/prod). Но если у вас его нет, необходимо запустить приложение в виде полной банки.