Разверните 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, нам необходимо выполнить следующие шаги:
-
Download Apache Tomcat и распаковать в папкуtomcat
-
Скопируйте наш файл WAR изtarget/spring-boot-tomcat.war в папкуtomcat/webapps/
-
Из терминала перейдите в папкуtomcat/bin и выполните
-
catalina.bat run (в Windows)
-
catalina.sh run (в системах на базе Unix)
-
Это была быстрая установка Tomcat, пожалуйста, обратитесь к руководству поTomcat Installation, чтобы получить полное руководство по установке. Также есть дополнительные способыdeploying a WAR file to Tomcat.
5. Заключение
В этом кратком руководстве мы создали простое приложение Spring Boot и превратили его в действительное WAR-приложение, которое можно развернуть на сервере Tomcat.
Как всегда, доступен полный исходный код примеровover on GitHub.