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 работала, необходимо выполнить следующие шаги:
- Приложение, развертываемое и запускаемое на сервере, должно запускаться с включенной удаленной отладкой:
Как мы видим, порт удаленной отладки здесь не упоминается. Следовательно, java выберет случайный порт
- Для того же проекта откройте Конфигурации запуска , выберите следующие параметры:
Выберите основной класс: org.springframework.boot.devtools.RemoteSpringApplication
В аргументах программы добавьте URL-адрес приложения, например http://localhost:8080 - Порт по умолчанию для отладчика через приложение spring-boot равен 8000 и может быть переопределен с помощью:
- Теперь создайте конфигурацию удаленной отладки, настроив порт как 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 , чтобы улучшить работу разработчиков и сократить время разработки за счет автоматизации многих действий.