IDEA/JRebel реализует внутреннее/внешнее/удаленное горячее развертывание Spring Boot на Tomcat

IntelliJ IDEA

1 Обзор

Так называемое горячее развертывание для приложений Java заключается в обновлении файлов классов Java во время выполнения.IDEA может использовать встроенный метод горячего развертывания Spring Boot для локального/удаленного горячего развертывания или использовать JRebel для локального/удаленного горячего развертывания, но Необходимо установить подключаемые модули JRebel и XRebel для IntelliJ. В этой статье будут представлены эти два метода горячего развертывания. Это должна быть самая подробная статья о горячем развертывании IDEA, которую можно найти в Интернете. Я считаю, что после ее прочтения эффективность разработки будет значительно улучшен. , больше не нужно вручную набирать пакет jar/war и загружать его на сервер, как раньше, и ряд громоздких операций.

2 Окружающая среда

  • IDE:IntelliJ IDEA 2019.3.1
  • Местный кот: 9.0.30
  • JRebel and XRebel for IntelliJ:2020.2.0
  • Сервер: CentOS 8.1.1911
  • Сервер Томкат: 9.0.33

3 Горячее развертывание IDEA

3.1 Инженерная часть

3.1.1 Новый проект

Здесь создается новый проект Spring Boot для тестирования горячего развертывания.

在这里插入图片描述
Метод упаковки изменен на war, потому что внешний Tomcat будет использоваться позже: Проверьте средство горячего развертывания Spring Boot DevTools и Spring Web со встроенным Tomcat.
在这里插入图片描述
在这里插入图片描述

3.1.2 Тестовые файлы

Контроллер Получить новый запрос в ответ на:

在这里插入图片描述
Здесь добавлено консольное сообщение для удобства просмотра.

3.2 Внутреннее горячее развертывание Tomcat

Spring Boot имеет встроенный Tomcat, который можно использовать непосредственно для горячего развертывания.

3.2.1 Настройки IDEA

Во-первых, вам нужно включить автоматическую сборку проекта в компиляторе:

在这里插入图片描述
Затем дважды нажмите Shift, переключитесь на «Действие» и выполните поиск в реестре:
在这里插入图片描述
Включите компилятор.automake.allow.when.app.running:
在这里插入图片描述
Наконец, отредактируйте настройки запуска:
在这里插入图片描述
Выберите один из следующих двух вариантов, чтобы обновить классы и ресурсы:
在这里插入图片描述

3.2.2 Тестирование

IDEA поставляется с HTTP-клиентом (на самом деле это плагин, который можно закрыть без необходимости), который может отправлять HTTP-запросы и создавать новый HTTP-запрос:

在这里插入图片描述
Назовите как хотите:
在这里插入图片描述
Добавьте GET-запрос:
在这里插入图片描述
Измените путь и порт, обратите внимание на соответствующий путь:
在这里插入图片描述
Вернитесь к настройкам запуска Spring Boot, Shift+F10 для запуска:
在这里插入图片描述
Затем вы можете отправить HTTP-запрос, нажав на маленький зеленый треугольник:
在这里插入图片描述
Соответствующая информация возвращается, и консоль также имеет соответствующий вывод:
在这里插入图片描述
在这里插入图片描述
Затем измените тест в контроллере на test1:
在这里插入图片描述
Не перезапуская проект, переключите окно и позвольте IDEA выполнить операцию обновления:
在这里插入图片描述
在这里插入图片描述
Консоль повторно напечатает слово Spring, и вы увидите сообщение Сборка завершена успешно в сообщениях, указывающее, что операция обновления выполнена успешно. Повторно отправьте исходный HTTP-запрос и сообщите об ошибке:
在这里插入图片描述
Поскольку в настоящее время нет возможности ответить на localhost:8080/test, после изменения на test1:
在这里插入图片描述
在这里插入图片描述

3.3 Внешнее горячее развертывание Tomcat

Так как соответствующие настройки IDEA были настроены, здесь повторяться не будем, если не настроен, настройте как указано выше, а затем нужно добавить внешнюю конфигурацию Tomcat.

3.3.1 Внешняя конфигурация Tomcat

Необходимо добавить внешнюю конфигурацию запуска Tomcat:

在这里插入图片描述
Добавьте Tomcat и выберите локальный:
在这里插入图片描述
Если Tomcat не отображается, см. дополнительные элементы здесь. Измените имя, Configure выбирает путь к локальному Tomcat и удаляет следующую сборку.
在这里插入图片描述
Разверните здесь, чтобы выбрать взорванный:
在这里插入图片描述
在这里插入图片描述
Вернитесь к корневому пути:
在这里插入图片描述
Вернитесь на вкладку «Сервер» и измените следующие два элемента на «Обновить классы и ресурсы»:
在这里插入图片描述

3.3.2 Тестирование

Обратите внимание, что внешнее горячее развертывание Tomcat не может быть запущено с помощью команды «Выполнить» и не может быть запущено напрямую с помощью Shift + F10, как внутреннее развертывание.Чтобы использовать отладку для запуска, Shift + F9:

在这里插入图片描述
Вам нужно убедиться, что порт по умолчанию 8080 не занят, сначала приостановите приложение Spring Boot прямо сейчас, запустите здесь, и Tomcat здесь, в службах.
在这里插入图片描述
Тестовый файл по-прежнему является test1, отправьте запрос:
在这里插入图片描述
Затем измените тело метода test1:
在这里插入图片描述
После переключения окон будет предложено перезагрузить класс:
在这里插入图片描述
Отправьте предыдущий HTTP-запрос еще раз:
在这里插入图片描述
在这里插入图片描述
успех! Однако такое горячее развертывание может изменить только тело метода.Если метод добавлен или исходное имя метода изменено и т. д., появится сообщение о том, что горячая замена не удалась, а виртуальная машина не поддерживает эту операцию:
在这里插入图片描述
Зайдите во всемогущий Baidu, чтобы проверить:
在这里插入图片描述
Говорят, что это ограничение Java HotSwap.HotSwap - это патч JVM, который здесь пропущен.В то же время некоторые сторонние инструменты, такие как JRebel, могут поддерживать этот тип модификации.Конечно, будет подробное введение ниже.

3.4 Горячее развертывание удаленного Tomcat

Удаленное горячее развертывание Tomcat более проблематично, есть много деталей, а ошибка порта - это набор исключений, поэтому, пожалуйста, наберитесь терпения и присмотритесь.Требуется три шага: установить Tomcat сервера, настроить конфигурацию сервера IDEA и установите рабочую конфигурацию Tomcat в IDEA. Наконец, проверьте файл .

3.4.1 Настройки Tomcat для сервера

Необходимо обрабатывать четыре порта: HTTP-порт Tomcat, порт JMX, порт RMI и порт отладки. Порт HTTP часто называют портом Tomcat.Браузер может получить доступ к домашней странице Tomcat по умолчанию, введя http://ip:port, который установлен в server.xml.

在这里插入图片描述
Создайте новый setenv.sh в каталоге bin Tomcat:

CATALINA_OPTS="-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=8888 
-Dcom.sun.management.jmxremote.rmi.port=8888
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Djava.rmi.server.hostname=ip
-agentlib:jdwp=transport=dt_socket,address=0.0.0.0:12345,suspend=n,server=y"

Порты JMX и RMI настроены одинаково, пока они не заняты, их можно взять по желанию.12345 за адресом - это порт отладки, который можно установить по мере необходимости.ip - это ip-адрес сервер

-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

Эти две строки указывают на то, что при подключении к Tomcat без использования ssl и с использованием клиента JMX аутентификация не требуется. Примечание для добавления

-Dcom.sun.management.jmxremote.rmi.port=8888

Этот порт RMI, многие статьи не добавляют это и приводят к сбою развертывания. Наконец, измените разрешение на выполнение и запустите tomcat:

chmod 750 setenv.sh
./startup.sh

Вы можете проверить прослушивание порта:

netstart -ano | grep -E "8080|8888|12345"

在这里插入图片描述
Все три порта отслеживаются, что указывает на успешность настройки.Если эти три порта не отслеживаются, проверьте журнал Tomcat. В то же время обратите внимание на проблему брандмауэра и группы безопасности.Если брандмауэр включен, пожалуйста, разрешите эти три порта пройти, и группа безопасности также должна открыть соответствующие правила порта.

3.4.2 Настройки сервера в IDEA

Создайте новое развертывание SFTP:

在这里插入图片描述
ip — это ip-адрес сервера, port — это ssh-порт, метод аутентификации может быть паролем или ключом, выберите по мере необходимости, корневой путь установлен на путь webapps tomcat, если есть проблема с искаженными символами, измените кодировку следующие дополнительные параметры для utf-8.
在这里插入图片描述
Протестируйте его после настройки.
在这里插入图片描述
Сопоставление: ниже приведены полные инструкции, локальный путь — это локальный путь проекта, путь развертывания — это путь относительно веб-приложений (корневой путь указан выше для веб-приложений), а веб-путь — это путь относительно URL-адреса.
在这里插入图片描述

3.4.3 Настройки Tomcat в IDEA

Создайте новый Tomcat Remote:

在这里插入图片描述
在这里插入图片描述
Вот самая важная настройка, установите порт JMX (здесь 8888, установленный в 3.4.1 выше), Хост выбирает сервер, созданный на предыдущем шаге, Путь от корня — это корневой путь, Сопоставляется как путь веб-приложений, а port в разделе Host — это порт TomcatHTTP (здесь используется порт 8080 по умолчанию, и конфигурация в 3.4.1 подробно описана).
在这里插入图片描述
Для развертывания здесь выберите развернутый военный пакет, а в контексте приложения выберите корневой путь.
在这里插入图片描述
Отладка здесь, чтобы изменить набор портов в 3.4.1:
在这里插入图片描述

3.4.4 Тестирование

Необходимо запускать в режиме отладки (Shift+F9), а не запускать напрямую (Shift+F10):

在这里插入图片描述
Сначала вам будет предложено подключиться к серверу и виртуальной машине:
在这里插入图片描述
Затем запросите успешное развертывание:
在这里插入图片描述
В это время браузер должен открываться автоматически, потому что URL настроен на открытие после запуска:
在这里插入图片描述
После изменения тела метода нажмите Ctrl+F9, чтобы запросить перезагрузку класса:
在这里插入图片描述
В сообщении Debug говорится, что класс был перезагружен:
在这里插入图片描述
Это делает горячее развертывание успешным. Конечно, как и при использовании внешнего Tomcat выше, если вы измените имя метода или добавите метод, вам будет предложено, что виртуальная машина не поддерживает операцию (решение состоит в использовании следующего JRebel):
在这里插入图片描述

4 Горячее развертывание JRebel

4.1 Введение в JRebel

在这里插入图片描述
JRebel — это агент JVM, который интегрируется с сервером приложений и может перезагружать классы с помощью существующих загрузчиков классов.Только измененные классы перекомпилируются и перезагружаются на лету в работающем приложении.

4.2 Установка

Установите из плагинов в настройках и найдите его:

在这里插入图片描述
Если скорость низкая, то можно скачать с официального сайта (кликните сюда) для загрузки, а затем установить локально:
在这里插入图片描述

4.3 Внутреннее горячее развертывание Tomcat

Внутреннее горячее развертывание TOCMAT очень простую. После выбора конфигурации Springboot Run, просто нажмите Rebel Run:

在这里插入图片描述
Консоль предлагает перезагрузить класс и перенастроить bean-компонент, указывая на успех.
在这里插入图片描述
Конечно, предпосылкой этого является то, что конфигурация Spring Boot по умолчанию была настроена, как в 3.2 выше, например, если она изменена на:
在这里插入图片描述
Таким образом, JRebel не будет иметь никакого эффекта.

4.4 Внешнее горячее развертывание Tomcat

После настройки внешнего Tomcat, как в 3.3 выше, это также прямой запуск Rebel одним щелчком мыши. Убедитесь, что порт не занят.

在这里插入图片描述
По сравнению с горячим развертыванием по умолчанию, самое большое отличие здесь в том, что он позволяет добавлять и изменять методы, а не просто модифицировать тело метода (иначе проблема 3.3 не возникнет). Вот метод в оригинальном контроллере:
在这里插入图片描述
После добавления метода:
在这里插入图片描述
在这里插入图片描述
Подсказка была перезагружена, указывая на успех, вместо запроса на операцию, не поддерживаемую виртуальной машиной.

4.5 Горячее развертывание удаленного Tomcat

Горячее развертывание удаленного Tomcat с использованием JRebel необходимо упаковать и загрузить перед горячим развертыванием.

4.5.1 Загрузка пакета

Перед горячим развертыванием необходимо вручную упаковать:

在这里插入图片描述
Загрузите его в веб-приложения Tomcat на сервере.

4.5.2 Новый сценарий

在这里插入图片描述
Выберите запуск на удаленном сервере или виртуальной машине, затем выберите Tomcat:
在这里插入图片描述
Следуйте инструкциям, чтобы создать новый скрипт:
在这里插入图片描述
Фактическое измерение также требует изменения разрешений скрипта, 750:
在这里插入图片描述
После запуска вы можете увидеть вывод JRebel: JRebel запущен в режиме удаленного сервера:
在这里插入图片描述
在这里插入图片描述
Это позволит вам успешно отслеживать изменения.

4.5.3 Добавить удаленный сервер

在这里插入图片描述
Имя сервера — произвольное, а URL — ip + порт (обратите внимание, что брандмауэр сервера и открытый порт группы безопасности регулируют), если установлена ​​аутентификация сервера (через

java -jar xxx.jar -set-remote-password PASSWORD

Настройки), вам необходимо проверить аутентификацию сервера и ввести пароль. Если Tomcat устанавливает пароль доступа (метод установкиПосмотреть здесь), вам нужно проверить базовую аутентификацию HTTP и заполнить имя пользователя и пароль:

在这里插入图片描述
Проверьте соединение:
在这里插入图片描述
Нет проблем, переходите к следующему шагу.

4.5.4 Тестирование

Затем откройте JRebel и выберите развернутый проект:

在这里插入图片描述
在这里插入图片描述
Ниже приведен метод Controller в упакованном виде только с одним тестом:
在这里插入图片描述
Test (обратите внимание, что путь перед test — это имя пакета, которому должно соответствовать):
在这里插入图片描述
在这里插入图片描述
Затем добавьте метод test1, ctrl+F9 и соберите:
在这里插入图片描述
На стороне сервера предлагается перезагрузить класс:
在这里插入图片描述
Введите test1 еще раз:
在这里插入图片描述
Это будет успешным при удаленном развертывании тепла!

5 Приложение: упаковка банки

Поскольку в Spring Boot встроен Tomcat, его можно упаковать в пакет jar для использования встроенного Tomcat. Таким образом, можно избежать ряда громоздких конфигураций Tomcat, включая сопоставление каталогов и порты. На основе исходного пакета war , измените в pom.xml:

在这里插入图片描述
Добавьте плагин maven (добавлен по умолчанию):
在这里插入图片描述
Вы можете удалить исходный ServletInitializer:
在这里插入图片描述
Пакет с Maven:
在这里插入图片描述
Вы можете сначала протестировать его локально:

java -jar demo.jar

Если нет проблем, вы можете загрузить его на сервер или использовать горячее развертывание напрямую.Обратите внимание, что Tomcat и JRebel необходимо изменить соответствующую конфигурацию, поэтому я не буду вдаваться в подробности.

Если вы считаете, что статья хорошая, ставьте лайк.

В то же время приглашаем обратить внимание на публичный аккаунт WeChat: Bingling Road.

在这里插入图片描述