Подтвердить что ты не робот

Горячая замена в Spring Boot

Я делал P.O.C с Spring Boot.

До сих пор это было очень хорошо и многообещающе, но есть один главный недостаток: я использую встроенный сервер (т.е. упаковываю веб-приложение в .jar), поэтому при разработке я должен перестроить банку и перезагружайте сервер каждый раз, когда я изменяю файлы CSS, HTML или JS. Там не горячая замена. Это действительно замедляет развитие пользовательского интерфейса.

Я могу подумать о нескольких быстрых исправлениях, таких как загрузка статических ресурсов из другого домена и обслуживание его из локального nginx, а также некоторые другие варианты, подобные этому, но у него нет встроенной опции при работе с IntelliJ/Eclipse?

4b9b3361

Ответ 1

Есть несколько вариантов. Запуск в среде IDE (особенно с включенной отладкой) - это хороший способ разработки (все современные среды IDE позволяют перезагружать статические ресурсы и, как правило, также заменять изменения в классах Java). Spring Boot devtools - это дешевый способ получить довольно большой импульс (просто добавьте его в свой путь к классам). Он работает, перезапуская ваше приложение в горячей JVM при обнаружении изменений. Он также отключает такие вещи, как кеширование тимьяна во время его работы, поэтому вам не нужно не забывать делать это самостоятельно. Вы можете использовать его с внешним процессом компилятора css/js, если вы пишете этот код с помощью инструментов более высокого уровня.

Spring Loaded больше не рекомендуется, но, вероятно, все еще используется. Более сложные инструменты на основе агентов работают намного лучше, если вам нужна горячая замена с нулевой задержкой (например, JRebel).

Смотрите документы для некоторых обновленного контента

Ответ 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).

Что это.

Ответ 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

  1. При использовании gradle включите в зависимость следующее: compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '2.0.1.RELEASE' & providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')

  2. В application.properties добавьте свойство spring.devtools.restart.additional-paths=.

  3. Постройте Gradle, а затем запустите приложение как bootRun.

Приложение готово выполнить горячую замену на модификацию классов