Spring Boot містить додатковий набір інструментальних засобів, які можуть зробити процес розробки додатків трохи
приємнішим. Модуль spring-boot-devtools
можна додавати до будь-якого проєкту для забезпечення
додаткових функцій під час розробки. Щоб впровадити підтримку інструментальних засобів розробки (devtools), додай
залежність модуля до свого складання, як показано в наступних лістингах для Maven та Gradle:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
dependencies {
developmentOnly("org.springframework.boot:spring- boot-devtools")
}
java-jar
або через спеціальний
завантажувач класів, вона вважається "виробничим додатком". Ти можеш керувати цією логікою роботи за допомогою
системної властивості spring.devtools.restart.enabled
. Щоб активувати devtools, незалежно від
завантажувача
класів, який використовується для запуску програми, встанови системну властивість -Dspring.devtools.restart.enabled=true
.
Цього не можна робити у виробничому середовищі, де виконання devtools становить загрозу безпеці. Щоб відключити
devtools, вимкни залежність або встанови системну властивість
-Dspring.devtools.restart.enabled=false
.
developmentOnly
у Gradle (як показано вище), це запобігатиме транзитному застосуванню
devtools до інших модулів, що використовують твій проєкт.
excludeDevtools
значення false
.
При використанні плагіна для Gradle конфігуруй classpath для завдання так, щоб він містив конфігурацію developmentOnly
.
Діагностика проблем із завантаженням класів
Функціональність перезапуску реалізована за допомогою двох завантажувачів класів. Для більшості програм такий підхід працює добре. Однак іноді він може призвести до проблем із завантаженням класів, особливо в багатомодульних проєктах.
Щоб діагностувати, чи справді проблеми із завантаженням класів викликані devtools та їх двома завантажувачами класів, спробуй вимкнути перезапуск. Якщо це вирішить проблеми, налаштуй перезапуск завантажувача класів на охоплення всього проєкту.
Властивості за замовчуванням
Деякі бібліотеки, що підтримуються Spring Boot, використовують кеші для підвищення продуктивності. Наприклад, шаблонізатори кешують скомпільовані шаблони, щоб уникнути повторного парсингу файлів шаблонів. До того ж, Spring MVC може додавати заголовки HTTP-кешування у відповіді при обробці статичних ресурсів. Хоча кешування дуже корисне у виробничому середовищі, воно може бути контрпродуктивним під час розробки, не дозволяючи бачити зміни, які були тільки що внесені до додатку. Тому spring-boot-devtools за замовчуванням деактивує налаштування кешування.
Налаштування кешу зазвичай конфігуруються за допомогою параметрів у файлі
application.properties
. Наприклад, Thymeleaf передбачає властивість spring.thymeleaf.cache
.
Замість того, щоб встановлювати ці властивості вручну, модуль spring-boot-devtools
автоматично
застосовує адекватну конфігурацію на час розробки.
У наступній таблиці перераховані всі властивості:
Ім'я | Значення за замовчуванням |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
spring.devtools.add-properties
у false
у файлі application.properties
.
Оскільки при розробці додатків на Spring MVC і Spring WebFlux потрібно більше інформації про вебзапити,
інструментальні засоби розробки передбачають активацію DEBUG
журналювання для web
-групи
журналювання. Це дасть інформацію про вхідний запит, який обробник його обробляє, про результат відповіді та інші
подробиці. Якщо потрібно реєструвати всі відомості запиту (включно з потенційною конфіденційною інформацією), можна
включити властивості конфігурації spring.mvc.log-request-details
або spring.codec.log-request-details
.
Автоматичний перезапуск
Програми, що використовують spring-boot-devtools
, автоматично
перезапускаються при зміні файлів у classpath. Це може бути корисною функцією при роботі в IDE, оскільки забезпечує
дуже швидкий зворотний зв'язок для внесення змін до коду. За замовчуванням будь-який запис у classpath, що вказує на
каталог, відстежується щодо змін. Зверни увагу, що деякі ресурси, такі як статичний вміст та шаблони подання, не
вимагають перезапуску програми.
forking
, встановлене в enabled
. Якщо ти
відключиш розгалуження (форкінг), ізольований завантажувач класів програми, що використовується devtools, не буде
створено, а перезавантаження не буде працювати належним чином.
SpringApplication.setRegisterShutdownHook(false)
).
ResourceLoader
, який
використовується ApplicationContext
. Якщо твій додаток вже передбачає такий завантажувач, він буде
обернутий. Пряме перевизначення методу
getResource
на ApplicationContext
не підтримується.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ