#java #spring #spring-boot #spring-cloud #spring-actuator
Вопрос:
У меня есть приложение spring boot, в котором я хочу использовать функцию @RefreshScope для перезагрузки внешней конфигурации во время выполнения без необходимости перезапуска службы.
Я весьма озадачен конкретной потенциальной ловушкой этого подхода — что произойдет, если я обновлю компонент (используя конечную точку, предоставленную приводом), в то время как компонент фактически выполняет длительную работу?
Будет ли это:
- Немедленно прервите выполнение компонента (что может вызвать проблемы, если мой код не подготовлен для этого)?
- Изящно дождаться завершения выполнения компонента, прежде чем повторно инициализировать его?
- Что-то еще?
Я не смог найти четкого ответа на этот вопрос в Интернете, включая документацию.
Комментарии:
1. 2 вещи происходят, среда обновляется, и компоненты свойств конфигурации обновляются, а также компоненты уничтожаются, и кэш области обновления очищается. Бобы воссоздаются при следующем доступе. Если у вас есть компонент, выполняющий что-то длительное, я бы посоветовал не включать его в область обновления. При обновлении среды
EnvironmentChangeEvent
публикуется событие приложения, свойства которого изменились. Я бы прислушался к этому и сделал работу, основанную на том, изменились ли свойства, которые интересуют боба.2. @spencergibb Итак, по-вашему, бобы уничтожаются резко и не изящно? Им не было отправлено никаких прерываний?