Spring Boot инструменты разработчика: автоматический перезапуск - файл триггера

Использование файла триггера

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

Любое обновление файла вызывает проверку, но перезапуск происходит только в том случае, если Devtools обнаружил, что ему нужно что-то делать.

Чтобы использовать файл триггера, присвойте свойству spring.devtools.restart.trigger-file имя (исключая любой путь) вашего файла триггера. Файл триггера должен появиться где-то на вашем пути к классам.

Например, если у вас есть проект со следующей структурой:

src
+- main
   +- resources
      +- .reloadtrigger

Тогда ваше свойство trigger-file будет:

spring.devtools.restart.trigger-file=.reloadtrigger

Перезапуск теперь будет происходить только при обновлении src/main/resources/.reloadtrigger.

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

Некоторые IDE имеют функции, которые избавляют вас от необходимости обновлять файл триггера вручную. Spring Tools для Eclipse и IntelliJ IDEA (Ultimate Edition) имеют такую поддержку. В Spring Tools вы можете использовать кнопку «перезагрузить» в представлении консоли (если ваш файл триггера называется .reloadtrigger). Для IntelliJ вы можете следовать инструкциям в их документации.

Настройка Classloader перезапуска

Как описано ранее в разделе «Перезапуск и перезагрузка» (Restart vs Reload), функция перезапуска реализуется с помощью двух загрузчиков классов. Для большинства приложений этот подход хорошо работает. Однако иногда это может вызвать проблемы с загрузкой классов.

По умолчанию любой открытый проект в вашей IDE загружается с загрузчиком классов «restart», а любой обычный файл .jar загружается с «базовым» загрузчиком классов. Если вы работаете над многомодульным проектом, и не все модули импортируются в вашу среду IDE, вам может потребоваться изменить настройки. Для этого вы можете создать файл META-INF/spring-devtools.properties.

Файл spring-devtools.properties может содержать свойства с префиксами restart.exclude и restart.include. Элементы include - это элементы, которые должны быть загружены в загрузчик классов «restart», а элементы exclude - это элементы, которые должны быть помещены в «базовый» загрузчик классов. Значением свойства является шаблон регулярного выражения, который применяется к пути к классу (classpath), как показано в следующем примере:

restart.exclude.companycommonlibs=/mycorp-common-[\\w\\d-\.]+\.jar
restart.include.projectcommon=/mycorp-myproj-[\\w\\d-\.]+\.jar

Все ключи свойств должны быть уникальными. Если свойство начинается с restart.include. или restart.exclude. оно учитывается.

Все META-INF/spring-devtools.properties из classpath загружены. Вы можете упаковать файлы внутри вашего проекта или в библиотеки, которые использует проект.

Известные ограничения

Функция перезапуска плохо работает с объектами, десериализованными с использованием стандартного ObjectInputStream. Если вам нужно десериализовать данные, вам может понадобиться использовать Spring ConfigurableObjectInputStream в сочетании с Thread.currentThread().GetContextClassLoader().

К сожалению, некоторые сторонние библиотеки десериализуются без учета загрузчика классов контекста. Если вы обнаружите такую проблему, вам нужно запросить исправление у первоначальных авторов.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки