Обзор Spring-Boot Dev Tools

Обзор Spring-Boot Dev Tools

1. Вступление

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

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

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

  • Свойства по умолчанию

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

  • Live Обновить

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

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

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

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


    org.springframework.boot
    spring-boot-devtools

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

2. Свойства по умолчанию

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. Live Обновить

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

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

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

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

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

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

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

Вот небольшой пример:


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

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

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

    -Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n

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

  2. Для того же проекта откройтеLaunch configurations, выберите следующие параметры: Выберите основной класс:org.springframework.boot.devtools.RemoteSpringApplication В аргументах программы добавьте URL-адрес приложения, например http://localhost:8080

  3. Порт по умолчанию для отладчика через приложение Spring-Boot - 8000 и может быть переопределен через:

    spring.devtools.remote.debug.local-port=8010
  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, чтобы улучшить взаимодействие с разработчиками и сократить время разработки за счет автоматизации многих операций.