Развернуть WAR-загрузку Spring на сервере Tomcat

Разверните WAR-файл Spring Boot на сервере Tomcat

1. Вступление

Spring Boot - это фреймворкconvention over configuration, который позволяет нам настроить готовую к работе настройку проекта Spring, аTomcat - один из самых популярных контейнеров сервлетов Java.

По умолчанию Spring Boot создает автономное приложение Java, которое может работать как настольное приложение или быть настроено как системная служба, но есть среды, в которых мы не можем установить новую службу или запустить приложение вручную.

В отличие от автономных приложений, Tomcat устанавливается как служба, которая может управлять несколькими приложениями в рамках одного и того же процесса приложения, избегая необходимости в конкретной настройке для каждого приложения.

В этом руководстве мы собираемся создать простое приложение Spring Boot и адаптировать его для работы в Tomcat.

2. Настройка приложения Spring Boot

Мы собираемся настроить простое веб-приложение Spring Boot, используя один из доступных начальных шаблонов:


    org.springframework.boot
    spring-boot-starter-parent
    2.0.2.RELEASE
    


    
        org.springframework.boot
        spring-boot-starter-web
    

There’s no need for additional configurations сверх стандартного@SpringBootApplication, поскольку Spring Boot позаботится о настройке по умолчанию.

Мы добавляем простую конечную точку REST, чтобы вернуть нам какой-то правильный контент:

@RestController
public class TomcatController {

    @GetMapping("/hello")
    public Collection sayHello() {
        return IntStream.range(0, 10)
          .mapToObj(i -> "Hello number " + i)
          .collect(Collectors.toList());
    }
}

Теперь давайте запустим приложение сmvn spring-boot:run и запустим браузер сhttp://localhost:8080/hello, чтобы проверить результаты.

3. Создание Spring Boot WAR

Контейнеры сервлетов ожидают, что приложения будут соответствовать некоторым контрактам, которые будут развернуты. Для Tomcat контракт - этоServlet API 3.0.

Чтобы наше приложение соответствовало этому контракту, мы должны выполнить несколько небольших изменений в исходном коде.

Во-первых, нам нужно упаковать приложение WAR вместо JAR. Для этого меняемpom.xml на следующее содержание:

war

Теперь давайте изменим окончательное имя файлаWAR, чтобы не включать номера версий:


    ${artifactId}
    ...

Затем мы собираемся добавить зависимость Tomcat:


   org.springframework.boot
   spring-boot-starter-tomcat
   provided

Наконец, мы инициализируем контекст сервлета, необходимый Tomcat, реализуя интерфейсSpringBootServletInitializer:

@SpringBootApplication
public class SpringBootTomcatApplication extends SpringBootServletInitializer {
}

Чтобы создать наше приложение WAR, развертываемое с помощью Tomcat, мы выполняемthe mvn clean package.. После этого наш файл WAR создается вtarget/spring-boot-tomcat.war (при условии, что MavenartifactId - это «spring-boot-tomcat»).

Мы должны учитывать, что эта новая настройка делает наше приложение Spring Boot неавтономным (если вы хотите, чтобы оно снова работало в автономном режиме, удалите областьprovided из зависимости tomcat).

4. Развертывание WAR на Tomcat

Чтобы развернуть и запустить наш файл WAR в Tomcat, нам необходимо выполнить следующие шаги:

  1. Download Apache Tomcat и распаковать в папкуtomcat

  2. Скопируйте наш файл WAR изtarget/spring-boot-tomcat.war в папкуtomcat/webapps/

  3. Из терминала перейдите в папкуtomcat/bin и выполните

    1. catalina.bat run (в Windows)

    2. catalina.sh run (в системах на базе Unix)

  4. Перейти кhttp://localhost:8080/spring-boot-tomcat/hello

Это была быстрая установка Tomcat, пожалуйста, обратитесь к руководству поTomcat Installation, чтобы получить полное руководство по установке. Также есть дополнительные способыdeploying a WAR file to Tomcat.

 5. Заключение

В этом кратком руководстве мы создали простое приложение Spring Boot и превратили его в действительное WAR-приложение, которое можно развернуть на сервере Tomcat.

Как всегда, доступен полный исходный код примеровover on GitHub.