1. Введение
Одним из самых приятных событий последних лет стало постоянное упрощение развертывания веб-приложений.
Пропустив все скучные промежуточные исторические этапы, мы подошли к сегодняшнему дню — когда мы можем обойтись не только громоздкими сервлетами и XML-шаблонами, но и в основном самими серверами.
В этой статье основное внимание будет уделено созданию « толстой банки»
из приложения Spring Boot — в основном для создания единого артефакта, который легко развертывать и запускать.
Boot предоставляет возможности для развертывания без контейнеров прямо из коробки: все, что нам нужно сделать, это добавить пару конфигураций в pom.xml:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.0</version>
</plugin>
</plugins>
2. Создайте и запустите
С этой конфигурацией мы теперь можем просто собрать проект со стандартной чистой установкой mvn
— здесь нет ничего необычного.
И запускаем его следующей командой: java -jar <имя-артефакта>
— очень просто и интуитивно понятно.
Надлежащее управление процессами выходит за рамки этой статьи, но есть простой способ поддерживать процесс в рабочем состоянии, даже когда мы выходим из системы, — использовать команду nohup
: nohup java -jar <имя-артефакта>.
Остановка проектов spring-boot
также ничем не отличается от остановки обычного процесса, будь то просто cntrl+c
или kill <pid>.
3. Толстая банка / Толстая война
За кулисами spring-boot
упаковывает все зависимости проекта в окончательный артефакт вместе с классами сторонних проектов (отсюда и «толстая» банка). Также встроен встроенный сервер Tomcat.
Таким образом, полученный артефакт полностью автономен, его легко развернуть с помощью стандартных инструментов Unix (scp, sftp… и т. д.), и его можно запустить на любом сервере с JVM.
По умолчанию Boot создает jar
- файл, но если мы изменим свойство упаковки в
pom.xml
на war
, вместо этого Maven естественным образом создаст war .
Это, конечно, будет исполняемым как автономным, так и развернутым в веб-контейнере.
4. Дальнейшая конфигурация
В большинстве случаев дополнительная настройка не требуется, все «просто работает», но в некоторых конкретных случаях нам может потребоваться явно указать spring-boot
, что такое основной класс. Один из способов сделать это — добавить свойство:
<properties>
<start-class>org.foreach.boot.Application</start-class>
</properties>
Если мы не
наследуем spring-boot-starter-parent, нам нужно сделать это в плагине Maven:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.0</version>
<configuration>
<mainClass>org.foreach.boot.Application</mainClass>
<layout>ZIP</layout>
</configuration>
</plugin>
Еще одна вещь, которую нам может понадобиться сделать в некоторых редких случаях, — это указать Maven распаковать
некоторые зависимости:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<requiresUnpack>
<dependency>
<groupId>org.jruby</groupId>
<artifactId>jruby-complete</artifactId>
</dependency>
</requiresUnpack>
</configuration>
</plugin>
5. Вывод
В этой статье мы рассмотрели бессерверное развертывание с использованием «толстых» jar-файлов, созданных с помощью spring-boot.
Как всегда, весь код в этой статье доступен на Github .