Spring загрузка без встроенного контейнера сервлета

У меня есть веб-приложение spring -boot, но я не хочу запускать его во встроенном Tomcat/Jetty. Каков правильный способ отключения встроенного контейнера?

Если я делаю что-л. вроде:

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

Я продолжаю получать

org.springframework.context.ApplicationContextException: Unable to start embedded container; 

Ответы

Ответ 1

Поскольку вы используете Maven (вместо Gradle), ознакомьтесь с этим руководством и этой частью официальной документации.

Основные шаги:

Сделайте встроенный контейнер сервлета предоставленным зависимым (поэтому удалив его из произведенной войны)

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

Добавьте инициализатор приложения, например:

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;

public class WebInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

}

Этот класс необходим, чтобы иметь возможность загружать приложение Spring, поскольку нет web.xml.