Предпочтительный метод развертывания Spring boot - через исполняемый файл jar, который содержит внутри tomcat.
Все начинается с простого java -jar myapp.jar
.
Теперь я хочу развернуть эту банку на моем сервере Linux на EC2, мне что-то не хватает или мне действительно нужно создать сценарий инициализации для правильного запуска приложения в качестве демона?
Если я просто вызываю, java -jar
приложение умирает, когда я выхожу из системы.
Я мог бы запустить его на экране или в nohup, но это не очень элегантно, и перезапуск моего сервера вынудил бы меня войти в систему и запустить процесс вручную.
Итак, есть ли что-то для этой задачи в весенней загрузке?
java
linux
spring
spring-boot
Клебер Гонсалвес
источник
источник
Ответы:
Обратите внимание, что начиная с Spring Boot 1.3.0.M1 вы можете создавать полностью исполняемые jar-файлы с помощью Maven и Gradle.
Для Maven просто включите в свой
pom.xml
:Для Gradle добавьте следующий фрагмент в свой
build.gradle
:Полностью исполняемый jar-файл содержит дополнительный скрипт в начале файла, который позволяет вам просто создать символическую ссылку на ваш Spring Boot jar
init.d
или использоватьsystemd
скрипт.init.d
пример:Это позволяет запускать, останавливать и перезапускать приложение, например:
Или используйте
systemd
скрипт:Дополнительная информация по следующим ссылкам:
init.d
услугаsystemd
услугаисточник
$ chmod +x /etc/init.d/yourapp
чтобы иметь возможность запускать / останавливать / перезапускатьБезусловно, самый простой и надежный способ запуска приложений Spring Boot в производственной среде - это Docker. Используйте Docker Compose, Docker Swarm или Kubernetes, если вам нужно использовать несколько подключенных сервисов.
Вот простой пример
Dockerfile
из официального руководства Spring Boot Docker, с которого можно начать:Вот пример командной строки для запуска контейнера как демона:
источник
У моего загрузочного приложения Spring есть два инициализатора. Один для разработки, а другой для производства. Для разработки я использую такой основной метод:
Мой инициализатор для производственной среды расширяет SpringBootServletInitializer и выглядит так:
Я использую gradle, и мой файл build.gradle применяет плагин WAR . Когда я запускаю его в среде разработки, я использую задачу bootrun . Когда я хочу развернуть его в производственной среде, я использую сборку задачу для генерации WAR и развертывания.
Я могу работать в продакшене как обычное весеннее приложение, не сбрасывая со счетов преимущества встроенного tomcat при разработке. Надеюсь это поможет.
источник
В производственной среде вы хотите, чтобы ваше приложение снова запускалось при перезапуске компьютера и т. Д., Создание сценария /etc/init.d/ и привязка к соответствующему уровню запуска для запуска и остановки - это правильный подход. Spring Boot не распространяется на это, поскольку это настройка, специфичная для операционной системы, и есть множество других опций, хотите ли вы, чтобы она работала в chroot jail, нужно ли ее останавливать / запускать перед другим программным обеспечением и т.
источник
Вы можете использовать приложение под названием Supervisor . В конфигурации супервизора вы можете определить несколько служб и способов их выполнения.
Для загрузочных приложений Java и Spring команда будет
java -jar springbootapp.jar
.Могут быть предоставлены параметры, чтобы приложение всегда работало, поэтому при перезапуске EC2 Supervisor перезапустит ваше приложение.
Я нашел Supervisor простым в использовании по сравнению с помещением сценариев запуска в /etc/init.d/. Сценарии запуска зависали или переходили в состояние ожидания в случае ошибок.
источник
Если вы используете gradle, вы можете просто добавить это в свой build.gradle
Затем вы можете запустить свое приложение, набрав ./your-app.jar
Кроме того, здесь вы можете найти полное руководство по настройке вашего приложения как службы.
56.1.1 Установка в качестве службы init.d (System V)
http://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html
ура
источник
bootRepackage { executable = true }
См. Docs.spring.io/spring-boot/docs/current/reference/html/…В ОС Windows без службы.
start.bat
stop.bat:
run.bat
источник
Я запускаю приложения, которые хочу запускать постоянно или хотя бы полупостоянно, через screen -dmS NAME / path / to / script. Насколько мне известно, это наиболее элегантное решение.
источник
Это просто, вы можете использовать плагин Spring boot maven для завершения развертывания кода.
конфигурация плагина, например:
И
jvmArtuments
это добавлено для вас jvm.profiles
выберет профиль для запуска вашего приложения.executable
может заставить ваше приложение работать без задержек.и если вы добавите
mvnw
в свой проект, или у вас есть maven enveriment. Вы можете просто вызвать./mvnw spring-boot:run
mvnw илиmvn spring-boot:run
maven.источник