Перейти к основному содержимому

Разверните Spring Boot WAR на сервере Tomcat

· 3 мин. чтения

1. Введение

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

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

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

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

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

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

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

Нет необходимости в дополнительных конфигурациях помимо стандартного @SpringBootApplication, поскольку Spring Boot позаботится о настройке по умолчанию.

Затем мы добавим простую REST EndPoint, чтобы возвращать нам допустимый контент:

@RestController
public class TomcatController {

@GetMapping("/hello")
public Collection<String> 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 следующим содержимым:

<packaging>war</packaging>

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

<build>
<finalName>${artifactId}</finalName>
...
</build>

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

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

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

@SpringBootApplication
public class SpringBootTomcatApplication extends SpringBootServletInitializer {
}

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

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

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

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

  1. Загрузите Apache Tomcat и распакуйте его в папку tomcat .

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

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

  4. catalina.bat запустить (в Windows)

  5. запуск catalina.sh (в системах на базе Unix)

  6. Перейдите по адресу http://localhost:8080/spring-boot-deployment/hello.

Это была быстрая установка Tomcat, поэтому ознакомьтесь с полным руководством по установке Tomcat . Существуют также дополнительные способы развертывания WAR-файла на Tomcat .

5. Вывод

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

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