Горячая замена в Spring Boot
Я делал P.O.C с Spring Boot.
До сих пор это было очень хорошо и многообещающе, но есть один главный недостаток: я использую встроенный сервер (т.е. упаковываю веб-приложение в .jar
), поэтому при разработке я должен перестроить банку и перезагружайте сервер каждый раз, когда я изменяю файлы CSS, HTML или JS. Там не горячая замена. Это действительно замедляет развитие пользовательского интерфейса.
Я могу подумать о нескольких быстрых исправлениях, таких как загрузка статических ресурсов из другого домена и обслуживание его из локального nginx
, а также некоторые другие варианты, подобные этому, но у него нет встроенной опции при работе с IntelliJ/Eclipse?
Ответы
Ответ 1
Есть несколько вариантов. Запуск в среде IDE (особенно с включенной отладкой) - это хороший способ разработки (все современные среды IDE позволяют перезагружать статические ресурсы и, как правило, также заменять изменения в классах Java). Spring Boot devtools - это дешевый способ получить довольно большой импульс (просто добавьте его в свой путь к классам). Он работает, перезапуская ваше приложение в горячей JVM при обнаружении изменений. Он также отключает такие вещи, как кеширование тимьяна во время его работы, поэтому вам не нужно не забывать делать это самостоятельно. Вы можете использовать его с внешним процессом компилятора css/js, если вы пишете этот код с помощью инструментов более высокого уровня.
Spring Loaded больше не рекомендуется, но, вероятно, все еще используется. Более сложные инструменты на основе агентов работают намного лучше, если вам нужна горячая замена с нулевой задержкой (например, JRebel).
Смотрите документы для некоторых обновленного контента
Ответ 2
Вы можете получить горячую замену:
- для java-кода: используя spring-loaded
- для шаблонов Thymeleaf: отключение кэша
Отметьте это сообщение, чтобы увидеть более подробную информацию: http://blog.netgloo.com/2014/05/21/hot-swapping-in-spring-boot-with-eclipse-sts/
Ответ 3
но разве нет какой-то встроенной опции при работе с IntelliJ/Eclipse?
В IntelliJ 15.0, windows 10, мне помогла следующая последовательность действий:
ШАГ 1: Добавлена следующая зависимость в pom (это упоминается повсюду, но только это не решает проблему), как упомянуто @jonashackt
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
ШАГ 2: Затем из File-> Настройки-> Сборка-Выполнение-Развертывание → Компилятор (убедитесь, что выбран основной параметр компилятора, а не какой-либо из его подопций)
включить Make Project автоматически. Нажмите ок и закройте диалог
ШАГ 3: Удерживая Shift + Ctrl + A (в окнах), вы увидите диалоговое окно поиска с заголовком "Введите действие или имя опции", введите реестр. Дважды щелкните первый вариант с надписью "Registry...", откроется другое окно. Ищите следующую опцию:
compiler.automake.allow.when.app.running
и включите его, нажмите кнопку Закрыть
ШАГ 4: Перезапустите IDE
Разработано из этого источника
Ответ 4
Вы также можете использовать JRebel - он перезагрузит все изменения (лучше hotswap), включая spring beans. Он легко интегрируется как с Intellij, так и с Eclipse.
Ответ 5
Предполагая, что вы используете gradle; используйте следующую конфигурацию в файле build.gradle
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'application'
applicationDefaultJvmArgs = ["-agentlib:jdwp=transport=dt_socket,address=localhost:7000,server=y,suspend=n"]
mainClassName = "package.ApplicationRunner"
Запустите приложение из IDE или командной строки, используя команду gradle build run
Теперь среда IDE может подключаться к удаленной JVM (на порту 7000), где запускается приложение загрузки spring. Он также поддерживает горячее развертывание статических файлов.
или даже вы можете запустить основной класс из intelliJ, если зависимости правильно управляются в среде IDE. Основной класс - это класс, который содержит основной метод, который будет вызывать SpringApplication.run("classpath:/applicationContext.xml", args);
Ответ 6
В Intellij я могу получить это поведение. Когда программа работает в режиме отладки, выберите Run > Reload Changed Classes
Примечание. После того, как Intellij завершает действие, он может сказать Loaded classes are up to date. Nothing to reload
. Это вводит в заблуждение, потому что на самом деле DID перезагружает ресурсы вашего класса.
В моей среде/настройке есть:
Intellij 13
Встраиваемый Tomcat
Запуск/Отладка конфигурации типа "Приложение" (которое просто использует основной класс)
Обслуживание статических html, css и js (без jsp)
Ответ 7
Я не знаю, как далеко поддерживается такая поддержка, но если вы используете Eclipse IDE (или кто-нибудь читает это): запуск вашего приложения Spring -Boot через m2e в режиме отладки (нажмите кнопку "Отладка" -отброса и выберите элемент конфигурации запуска maven).
Он работает для меня как шарм.
Мой элемент конфигурации запуска maven настроен следующим образом:
-
Цель
- - "spring -boot: run"
- базовый каталог - это каталог проекта
Я не использую любые другие библиотеки (даже не Spring -boot-devtools).
Что это.
Ответ 8
попробуйте использовать этот тег spring-boot-devtools в pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
http://mytechnologythought.blogspot.com/2017/07/how-to-run-server-of-spring-boot-auto.html
Ответ 9
Я рекомендую Thymeleaf (механизм шаблонов), jRebel для личных разработчик.
Файлы шаблонов Thymeleaf - это только ресурсы HTML. Таким образом, они меняются сразу после редактирования файлов шаблонов.
Ответ 10
Из 1.3.0. (теперь в Milestone 2), вы можете использовать spring -boot-devtools для этого в качестве подхода lightweigt - см. docs или этот blogpost.
Просто обновите до >= 1.3.0. и добавьте следующее к вашему pom.xml:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
Затем запустите свой SpringBootApplication с Run As... и вы в порядке.
Ответ 11
Если вы используете maven, spring -boot-maven-plugin в вашем pom.xml должен быть таким, чтобы получить горячую замену:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
</dependencies>
</plugin>
и если вы используете тимелеар, добавьте это в свои свойства приложения:
spring.thymeleaf.cache=false
Но помните что-то: не используйте это в своей производственной среде.
Ответ 12
Как выполнить горячую замену в приложении Springboot
-
При использовании gradle включите в зависимость следующее: compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '2.0.1.RELEASE'
& providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
-
В application.properties добавьте свойство spring.devtools.restart.additional-paths=.
-
Постройте Gradle, а затем запустите приложение как bootRun.
Приложение готово выполнить горячую замену на модификацию классов