«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 \u003cимя-артефакта\u003e — очень просто и интуитивно понятно.
Надлежащее управление процессами выходит за рамки этой статьи, но есть простой способ поддерживать процесс в рабочем состоянии, даже когда мы выходим из системы, — это использовать команду nohup: nohup java -jar \u003cимя-артефакта\u003e.
Остановка проектов spring-boot также ничем не отличается от остановки обычного процесса, будь то просто cntrl+c или kill \u003cpid\u003e.
3. Fat Jar / Fat War
За кулисами spring-boot упаковывает все зависимости проекта в окончательный артефакт вместе с классами сторонних проектов (отсюда и «толстый» jar). Также встроен встроенный сервер Tomcat.
Таким образом, полученный артефакт является полностью автономным, его легко развернуть с помощью стандартных инструментов Unix (scp, sftp… и т. д.), и его можно запустить на любом сервере с JVM.
По умолчанию Boot создает jar-файл, но если мы изменим свойство упаковки в pom.xml на war, вместо этого Maven естественным образом создаст war.
Это, конечно, будет исполняемым как автономным, так и развернутым в веб-контейнере.
4. Дальнейшая настройка
Большую часть времени дополнительная настройка не требуется, все «просто работает», но в некоторых конкретных случаях нам может потребоваться явно указать spring-boot, какой основной класс. Один из способов сделать это — добавить свойство:
<properties>
<start-class>org.baeldung.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.baeldung.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>
Как всегда, весь код в этой записи доступен на Github.
«
As always, the code in this writeup is all available over on Github.