Поскольку Springboot является структурой микросервиса, его метод развертывания производства должен быть максимально простым, что является огромной отличием от обычных веб -приложений. Он может внедрять веб -контейнер, такой как Tomcat, пристани и т. Д., И больше не нужно упаковать приложение в определенную форму, указанную контейнером.
Для Springboot упаковывает его в простой пакет JAR и непосредственно с использованием Java -Jar может быть запущено. Это очень элегантный способ, но он также вызывает определенные проблемы, такие как: как остановить приложение? В прошлом приложения были развернуты в определенных контейнерах, а сценарии, предоставленные контейнером, могли быть элегантно прекращены, но теперь контейнер встроен и сценарии исчезают. Что я должен делать? Прямое убийство - это способ, но оно кажется слишком грубым и может привести много неожиданных проблем.
Поскольку мы можем придумать проблемы, так же, как и производители кадров, тогда они подготовили для нас решения? Есть да, и я представлю некоторые решения, которые я узнал ниже.
1. Используйте конечные точки
В 4 -й части официальной документации Springboot представлены различные функции, подготовленные для выпуска подачи заявок. Среди них, благодаря конечной точке Actuator's HTTP, разработчики могут легко контролировать и управлять приложениями.
Представьте указанный стартовый пакет:
"org.springframework.boot: Spring-Boot-Starter-Actuator: $ {SpringBootVersion}"Откройте следующие две конфигурации в Application.yml, чтобы остановить приложение через HTTP -запрос
Управление: Безопасность: включено: falseendpoints: shutdown: включен: true: true
Команды операции следующие:
curl -x post http: // host: порт/выключение
Но этот метод имеет очень серьезную проблему, то есть любой может контролировать остановку приложения, что, несомненно, неприемлемо для производственного приложения. Некоторые люди могут подумать, что адрес ссылки сейчас слишком прост, и неманингеры могут легко догадаться, можно ли избежать этой проблемы, если используется очень сложный адрес. Очень хорошо, это предложение хорошее, давайте посмотрим на соответствующие конфигурации, предоставленные Springboot.
Конечные точки: выключение: включено: true path: /xxx
После завершения конфигурации вышеуказанная команда больше не доступна. Команда должна быть обновлена как:
curl -x post http: // host: port/xxx
Конечно, /XXX - это только тот, который я установил случайно, вы можете установить любой адрес. Хотя безопасность немного выше, такой уровень безопасности все еще недоступен для применения к производственной среде. Так есть ли другие защитные меры? Да, в дополнение к изменению пути выключения, мы также можем добавить унифицированный контекст ко всем операциям управления, настроить независимые порты и ограничить указанный IP -доступ (обычно ограниченный нативной машиной). Конфигурация заключается в следующем:
Управление: безопасность: включено: ложный порт: 9001 Адрес: 127.0.0.1 Context-Path: /admin
Измененная команда отмены обслуживания - это:
curl -x post http://127.0.0.1:9001/admin/xxx
Это на самом деле достаточно безопасно. Чтобы дополнительно обеспечить безопасность системы, добавьте уровень HTTP Basic Auth.
Увеличить зависимости безопасности:
"org.springframework.boot: Spring-Boot-Starter-Security: $ {SpringBootVersion}"Измените файл конфигурации следующим образом:
Конечные точки: выключение: включено: true Path: /xxxmanagement: Безопасность: включено: True Port: 9001 Адрес: 127.0.0.1.
После завершения конфигурации окончательная команда прекращения работы:
curl -x post -u Root: 123456 http://127.0.0.1:9001/admin/xxx
2. Зарегистрируйтесь как системная служба
В дополнение к запуску приложений Springboot с Java -JAR, вы можете легко зарегистрироваться в качестве системы Linux/Unix System с init.d или SystemD, что делает его очень простым в установке и управлении приложениями SpringBoot в производственной среде.
В проекте Maven, чтобы создать «полностью исполняемый» JAR, необходимо ввести следующие плагины:
<blicin> <groupid> org.springframework.boot </GroupId> <ArtifactId> Spring-boot-maven-plugin </artifactid> <serse> 1.5.2.2.release </version> <figureturation> </rececureable> true </rececureable> </configuration> </plugin>
В проекте Gradle эквивалентная конфигурация заключается в следующем:
Плагины {id 'org.springframework.boot' версия '1.5.2.release'} springboot {execute = true}После завершения конфигурации вы можете запустить встроенное приложение через ./application-name.jar.
Наконец, нам нужно установить упакованное приложение в службу init.d, чтобы его можно было легко управлять с помощью Unix/Linux. Метод работы очень прост. Вам просто нужно просто связать приложение с init.d (где Funda - это мое собственное имя приложения, и вам нужно заменить его в соответствии с ситуацией при экспериментировании).
ln -s/app/funda/funda.jar /etc/init.d/funda
Проверьте, успешно ли установлена ссылка
ls -l /etc/init.d/funda
Запустите службу, и журнал приложения может просмотреть файл /var/log/funda.log
Сервис Funda Start
Другие общие команды
# Проверьте приложение, работающую службу статуса Status# Stop# Stop Application Service Funda Stop
Сводка вопросов:
После того, как ссылка будет успешной, приложение не может быть успешно начато. Порудно найти Java. Используйте следующую команду, чтобы связать команду JDK Java с /sbin /java.
ln -s/usr/local/jdk1.8.0_131/bin/java/sbin/java
Ссылка на ссылку:
Конечные точки
Мониторинг и управление над http
Unix/Linux Services
Невозможно найти Java #5690
Ссылка на проект:
Github: https://github.com/qchery/funda
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.