«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.