Весеннее облако @RefreshScope за кулисами

#java #spring #spring-boot #spring-cloud #spring-actuator

Вопрос:

У меня есть приложение spring boot, в котором я хочу использовать функцию @RefreshScope для перезагрузки внешней конфигурации во время выполнения без необходимости перезапуска службы.

Я весьма озадачен конкретной потенциальной ловушкой этого подхода — что произойдет, если я обновлю компонент (используя конечную точку, предоставленную приводом), в то время как компонент фактически выполняет длительную работу?

Будет ли это:

  1. Немедленно прервите выполнение компонента (что может вызвать проблемы, если мой код не подготовлен для этого)?
  2. Изящно дождаться завершения выполнения компонента, прежде чем повторно инициализировать его?
  3. Что-то еще?

Я не смог найти четкого ответа на этот вопрос в Интернете, включая документацию.

Комментарии:

1. 2 вещи происходят, среда обновляется, и компоненты свойств конфигурации обновляются, а также компоненты уничтожаются, и кэш области обновления очищается. Бобы воссоздаются при следующем доступе. Если у вас есть компонент, выполняющий что-то длительное, я бы посоветовал не включать его в область обновления. При обновлении среды EnvironmentChangeEvent публикуется событие приложения, свойства которого изменились. Я бы прислушался к этому и сделал работу, основанную на том, изменились ли свойства, которые интересуют боба.

2. @spencergibb Итак, по-вашему, бобы уничтожаются резко и не изящно? Им не было отправлено никаких прерываний?