Рубрики
Без рубрики

Приложение Spring Boot как служба

Краткое и практическое руководство по запуску приложений Spring Boot в качестве службы

Автор оригинала: baeldung.

1. Обзор

В этой статье рассматриваются некоторые варианты запуска приложений Spring Boot в качестве службы.

Во-первых, мы расскажем о вариантах упаковки веб-приложений и системных службах. В последующих разделах мы рассмотрим различные альтернативы, которые у нас есть при настройке службы как для Linux, так и для систем на базе Windows.

Наконец, в заключение мы приведем некоторые ссылки на дополнительные источники информации.

2. Инструкции по настройке и сборке проекта

2.1. Упаковка

Веб-приложения традиционно упаковываются в виде архива веб-приложений (WAR) и развертываются на веб-сервере.

Приложения Spring Boot могут быть упакованы как в файлы WAR, так и в файлы JAR. Последний встраивает веб-сервер в файл JAR, что позволяет запускать приложения без необходимости установки и настройки сервера приложений.

2.2. Конфигурация Maven

Давайте начнем с определения конфигурации вашего pom.xml файл:

jar


    org.springframework.boot
    spring-boot-starter-parent
    1.4.0.RELEASE



    ....



    
        
            org.springframework.boot
            spring-boot-maven-plugin
            
                true
            
        
    

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

Обратите внимание, что мы установили параметр в true для spring-boot-maven-plugin артефакта. Это гарантирует, что файл MANIFEST.MF будет добавлен в пакет JAR. Этот манифест содержит запись Main-Class , которая указывает, какой класс определяет основной метод для вашего приложения.

2.3. Создание Приложения

Выполните следующую команду в корневом каталоге приложения:

$ mvn clean package

Исполняемый файл JAR теперь доступен в каталоге target , и мы можем запустить приложение, выполнив следующую команду в командной строке:

$ java -jar your-app.jar

На этом этапе вам все еще нужно вызвать интерпретатор Java с параметром -jar . Есть много причин, по которым было бы предпочтительнее, чтобы ваше приложение запускалось, имея возможность вызывать его в качестве службы.

3. В Linux

Чтобы запустить программу в качестве фонового процесса, мы могли бы просто использовать команду nohup Unix, но это также не является предпочтительным способом по разным причинам. Хорошее объяснение приводится в этом потоке .

Вместо этого мы собираемся демонизировать наш процесс. В Linux мы можем настроить демона либо с помощью традиционного сценария System V init , либо с помощью файла конфигурации System . Первый вариант традиционно является наиболее известным, но постепенно заменяется вторым.

Вы можете найти более подробную информацию об этой разнице здесь .

Для повышения безопасности мы сначала создаем определенного пользователя для запуска службы и соответствующим образом меняем разрешения на исполняемый файл JAR:

$ sudo useradd baeldung
$ sudo passwd baeldung
$ sudo chown baeldung:baeldung your-app.jar
$ sudo chmod 500 your-app.jar

3.1. Инициализация системы V

Исполняемый JAR-файл Spring Boot упрощает процесс установки службы:

$ sudo ln -s /path/to/your-app.jar /etc/init.d/your-app

Приведенная выше команда создает символическую ссылку на исполняемый файл JAR. Вы должны использовать полный путь к исполняемому файлу JAR, иначе символическая ссылка не будет работать должным образом. Эта ссылка позволяет запустить приложение как службу:

$ sudo service your-app start

Скрипт поддерживает стандартные команды start , stop , restart и status . Более того:

  • он запускает службы, работающие под пользователем baeldung мы только что создали
  • он отслеживает идентификатор процесса приложения в /var/run/your-app/your-app.pid
  • он записывает журналы консоли в /var/log/your-app.log , который вы можете проверить, если ваше приложение не запустится должным образом

3.2. Системы

Настройка systemd service также очень проста. Во-первых, мы создаем скрипт с именем your-app.service , используя следующий пример, и помещаем его в каталог /etc/systemd/system :

[Unit]
Description=A Spring Boot application
After=syslog.target

[Service]
User=baeldung
ExecStart=/path/to/your-app.jar SuccessExitStatus=143 

[Install] 
WantedBy=multi-user.target

Не забудьте изменить поля Description , User и ExecStart в соответствии с вашим приложением. На этом этапе вы также должны иметь возможность выполнять вышеупомянутые стандартные служебные команды.

В отличие от подхода System V init , описанного в предыдущем разделе, файл идентификатора процесса и файл журнала консоли должны быть явно настроены с использованием соответствующих полей в сценарии службы. Исчерпывающий список опций можно найти здесь .

3.3. Выскочка

Upstart -это менеджер служб на основе событий, потенциальная замена System V init , которая обеспечивает больший контроль над поведением различных демонов.

На сайте есть хорошие инструкции по установке , которые должны работать практически для любого дистрибутива Linux. При использовании Ubuntu вы, вероятно, уже установили и настроили его (проверьте, есть ли какие-либо задания с именем, начинающимся с “upstart” в /etc/init ).

Мы создаем задание your-app.conf для запуска нашего приложения Spring Boot:

# Place in /home/{user}/.config/upstart

description "Some Spring Boot application"

respawn # attempt service restart if stops abruptly

exec java -jar /path/to/your-app.jar

Теперь запустите “start your-app”, и ваша служба запустится.

Upstart предлагает множество вариантов конфигурации заданий, большинство из них вы можете найти здесь .

4. В Windows

В этом разделе мы представляем несколько вариантов, которые можно использовать для запуска Java JAR в качестве службы Windows.

4.1. Оболочка службы Windows

Из-за трудностей с лицензией GPL Java Service Wrapper (см. Следующий подраздел) в сочетании, например, с лицензией MIT Дженкинса , был задуман проект Windows Service Wrapper , также известный как winsw .

Wins предоставляет программные средства для установки/удаления/запуска/остановки службы. Кроме того, он может использоваться для запуска любого исполняемого файла в качестве службы под Windows, в то время как оболочка службы Java, как следует из ее названия, поддерживает только приложения Java.

Во-первых, вы загружаете двоичные файлы здесь . Далее, файл конфигурации, который определяет нашу службу Windows, MyApp.xml , должно выглядеть так:


    MyApp
    MyApp
    This runs Spring Boot as a Service.
    
    java
    -Xmx256m -jar "%BASE%\MyApp.jar"
    rotate

Наконец, вы должны переименовать winsw.exe кому MyApp.exe так, чтобы его имя совпадало с MyApp.xml файл конфигурации. После этого вы можете установить сервис следующим образом:

$ MyApp.exe install

Аналогично, вы можете использовать uninstall , start , stop и т. Д.

4.2. Оболочка службы Java

В случае, если вы не возражаете против лицензирования GPL проекта Java Service Wrapper , эта альтернатива может также удовлетворить ваши потребности в настройке файла JAR в качестве службы Windows. В принципе, оболочка службы Java также требует, чтобы вы указали в файле конфигурации, который определяет, как запускать ваш процесс как службу в Windows.

В этой статье очень подробно объясняется, как настроить такое выполнение файла JAR в качестве службы под Windows, поэтому нам не нужно повторять эту информацию.

5. Дополнительные ссылки

Приложения Spring Boot также могут запускаться как служба Windows с помощью Procrun демона Apache Commons project. Procrun – это набор приложений, которые позволяют пользователям Windows переносить Java-приложения в качестве служб Windows. Такая служба может быть настроена на автоматический запуск при загрузке машины и будет продолжать работать без входа пользователя в систему.

Более подробную информацию о запуске приложений Spring Boot под Unix можно найти здесь . Существуют также подробные инструкции по изменению файлов модулей Systemd для систем на базе Red hat . Окончательно

Наконец, это краткое руководство описывает, как включить скрипт Bash в ваш файл JAR, чтобы он сам стал исполняемым файлом!

6. Заключение

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

Просто не забудьте соблюдать важные и простые меры безопасности в отношении разрешений пользователей на запуск вашей службы.