Рубрики
Без рубрики

Обзор программ для разработки с пружинной загрузкой

Краткий и практический обзор девтулов Spring Boot.

Автор оригинала: baeldung.

1. введение

Spring Boot дает нам возможность быстро настраивать и запускать службы.

Чтобы еще больше улучшить опыт разработки, Spring выпустила инструмент spring-boot-devtools – как часть Spring Boot-1.3. В этой статье мы попытаемся рассказать о преимуществах, которых мы можем достичь с помощью новой функциональности.

Мы рассмотрим следующие темы:

  • Свойства по умолчанию
  • Автоматический перезапуск
  • Живая перезагрузка
  • Глобальные настройки
  • Удаленные приложения

1.1. Добавьте Spring-Boot-Devtools в проект

Добавление spring-boot-devtools в проект так же просто, как добавление любого другого модуля spring-boot. В существующем проекте spring-boot добавьте следующую зависимость:


    org.springframework.boot
    spring-boot-devtools

Выполните чистую сборку проекта, и теперь вы интегрированы с spring-boot-devtools. Новейшую версию можно получить из здесь , и все версии можно найти здесь .

Выполните чистую сборку проекта, и теперь вы интегрированы с spring-boot-devtools. Новейшую версию можно получить из || здесь||, и все версии можно найти || здесь || .

Spring-boot выполняет множество автоматических конфигураций, включая включение кэширования по умолчанию для повышения производительности. Одним из таких примеров является кэширование шаблонов, используемых движками шаблонов, например thymeleaf . Но во время разработки гораздо важнее увидеть изменения как можно быстрее.

Поведение кэширования по умолчанию может быть отключено для thymeleaf с помощью свойства spring.thymeleaf.cache=false в файле application.properties . Нам не нужно делать это вручную, представляя это spring-boot-devtools делает это автоматически для нас.

3. Автоматический перезапуск

В типичной среде разработки приложений разработчик внесет некоторые изменения, построит проект и развернет/запустит приложение, чтобы новые изменения вступили в силу, или попытается использовать JRebel и т. Д.

Используя spring-boot-devtools, этот процесс также автоматизирован. Всякий раз, когда файлы изменяются в пути к классу, приложения, использующие spring-boot-devtools , заставляют приложение перезапускаться. Преимущество этой функции заключается в том, что время, необходимое для проверки внесенных изменений, значительно сокращается:

19:45:44.804 ... - Included patterns for restart : []
19:45:44.809 ... - Excluded patterns for restart : [/spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/]
19:45:44.810 ... - Matching URLs for reloading : [file:/.../target/test-classes/, file:/.../target/classes/]

 :: Spring Boot ::        (v1.5.2.RELEASE)

2017-03-12 19:45:45.174  ...: Starting Application on machine with PID 7724 (\target\classes started by user in )
2017-03-12 19:45:45.175  ...: No active profile set, falling back to default profiles: default
2017-03-12 19:45:45.510  ...: Refreshing org.springframework.boot[email protected]385c3ca3: startup date [Sun Mar 12 19:45:45 IST 2017]; root of context hierarchy

Как видно из журналов, поток, породивший приложение, не является main , а скорее restartedMain потоком. Любые изменения, внесенные в проект, будь то изменение файла java, приведут к автоматическому перезапуску проекта:

2017-03-12 19:53:46.204  ...: Closing org.springframework.boot[email protected]385c3ca3: startup date [Sun Mar 12 19:45:45 IST 2017]; root of context hierarchy
2017-03-12 19:53:46.208  ...: Unregistering JMX-exposed beans on shutdown


 :: Spring Boot ::        (v1.5.2.RELEASE)

2017-03-12 19:53:46.587  ...: Starting Application on machine with PID 7724 (\target\classes started by user in )
2017-03-12 19:53:46.588  ...: No active profile set, falling back to default profiles: default
2017-03-12 19:53:46.591  ...: Refreshing org.springframework.boot[email protected]acaf4a1: startup date [Sun Mar 12 19:53:46 IST 2017]; root of context hierarchy

4. Живая перезагрузка

модуль spring-boot-devtools включает встроенный сервер загрузки, который используется для запуска обновления браузера при изменении ресурса.

Чтобы это произошло в браузере, нам нужно установить плагин LiveReload, одной из таких реализаций является Remote LiveReload для Chrome.

5. Глобальные настройки

spring-boot-devtools предоставляет способ настройки глобальных параметров, которые не связаны с каким-либо приложением. Этот файл называется .spring-boot-devtools.properties и находится в $HOME.

6. Удаленные приложения

6.1. Удаленная отладка через HTTP (Удаленный отладочный туннель)

spring-boot-devtools предоставляет готовые возможности удаленной отладки через HTTP, для этого необходимо, чтобы spring-boot-devtools были упакованы как часть приложения. Это может быть достигнуто путем отключения exclude Dev tools конфигурации в плагине в maven.

Вот краткий пример:


    
        
            org.springframework.boot
            spring-boot-maven-plugin
            
                false
            
        
    

Теперь, чтобы удаленная отладка через HTTP работала, необходимо выполнить следующие шаги:

  1. Приложение, развертываемое и запускаемое на сервере, должно запускаться с включенной удаленной отладкой:

    Как мы видим, порт удаленной отладки здесь не упоминается. Следовательно, java выберет случайный порт

  2. Для того же проекта откройте Конфигурации запуска , выберите следующие параметры:
    Выберите основной класс: org.springframework.boot.devtools.RemoteSpringApplication
    В аргументах программы добавьте URL-адрес приложения, например http://localhost:8080
  3. Порт по умолчанию для отладчика через приложение spring-boot равен 8000 и может быть переопределен с помощью:
  4. Теперь создайте конфигурацию удаленной отладки, настроив порт как 8010 как настроено с помощью свойств или 8000 , если придерживаться значений по умолчанию

Вот как будет выглядеть журнал:

  .   ____          _                                              __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _          ___               _      \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` |        | _ \___ _ __  ___| |_ ___ \ \ \ \
 \\/  ___)| |_)| | | | | || (_| []::::::[]   / -_) '  \/ _ \  _/ -_) ) ) ) )
  '  |____| .__|_| |_|_| |_\__, |        |_|_\___|_|_|_\___/\__\___|/ / / /
 =========|_|==============|___/===================================/_/_/_/
 :: Spring Boot Remote ::  (v1.5.2.RELEASE)

2017-03-12 22:24:11.089  ...: Starting RemoteSpringApplication v1.5.2.RELEASE on machine with PID 10476 (..\org\springframework\boot\spring-boot-devtools\1.5.2.RELEASE\spring-boot-devtools-1.5.2.RELEASE.jar started by user in project)
2017-03-12 22:24:11.097  ...: No active profile set, falling back to default profiles: default
2017-03-12 22:24:11.357  ...: Refreshing org.spring[email protected]11e21d0e: startup date [Sun Mar 12 22:24:11 IST 2017]; root of context hierarchy
2017-03-12 22:24:11.869  ...: The connection to http://localhost:8080 is insecure. You should use a URL starting with 'https://'.
2017-03-12 22:24:11.949  ...: LiveReload server is running on port 35729
2017-03-12 22:24:11.983  ...: Started RemoteSpringApplication in 1.24 seconds (JVM running for 1.802)
2017-03-12 22:24:34.324  ...: Remote debug connection opened

6.2. Удаленное обновление

Удаленный клиент отслеживает путь к классу приложения на предмет изменений, как это делается для функции удаленного перезапуска. Любое изменение в пути к классу приводит к тому, что обновленный ресурс перемещается в удаленное приложение и запускается перезапуск.

Изменения вносятся, когда удаленный клиент запущен и работает, так как мониторинг измененных файлов возможен только в этом случае.

Вот как это выглядит в журналах:

2017-03-12 22:33:11.613  INFO 1484 ...: Remote debug connection opened
2017-03-12 22:33:21.869  INFO 1484 ...: Uploaded 1 class resource

7. Заключение

В этой краткой статье мы только что продемонстрировали, как мы можем использовать модуль spring-boot-devtools , чтобы улучшить работу разработчиков и сократить время разработки за счет автоматизации многих действий.