Когда элемент конфигурации spring cloud обновляется, есть ли способ узнать в клиенте, чтобы иметь возможность пересчитать некоторые вещи?

#spring-cloud-config #spring-cloud-config-server

#spring-cloud-config #spring-cloud-config-server

Вопрос:

С spring cloud config, когда я обновляю конфигурацию и вызываю обновление на любых клиентах, есть ли способ получить уведомление о том, что это произошло? Если я создаю объекты на основе некоторых @ConfigurationProperties , я захочу обновить эти объекты с новым состоянием этих иерархических свойств. Я бы предпочел не выполнять поиск каждый раз, когда мне нужно ссылаться на реквизит конфигурации; в моем случае лучше обновлять определенные объекты во время изменений конфигурации. Итак, есть ли способ подключиться к этому жизненному циклу обновления?

Редактировать: В идеале, если бы я мог @Configuration сообщить классу о событии обновления и повторно привязать / повторно создать экземпляр некоторых соответствующих Spring @Bean -ов, это было бы идеально!

Ответ №1:

Итак, когда я опубликовал этот вопрос месяц назад, я, очевидно, был новичком в этом и довольно наивным. С тех пор я узнал, что @ConfigurationProperties обновляется при обновлении клиентов spring cloud config. Скажите, что у вас есть компонент (ломбок, чтобы уменьшить шаблон, конечно):

 @Data
public class ClientSettings {
    private List<String> list1 = new ArrayList<>();
    private List<String> list2 = new ArrayList<>();
    private List<String> list3 = new ArrayList<>();
}
 

И у вас есть такой @Configuration класс:

 @Configuration
public class PropsConfig {

    @Bean
    @RefreshScope
    @ConfigurationProperties(prefix = "settings")
    public ClientSettings clientSettings() {
        return new ClientSettings();
    }
}
 

Если вы обновите файл конфигурации, который обслуживает сервер spring cloud config, а затем вызовете refresh конечную точку привода на клиенте, базовый компонент будет обновлен, и все службы, к которым подключен этот компонент, будут иметь обновленный компонент после его обновления.

Итак, браво Spring за то, что он так хорошо реализовал это волшебное волшебство вуду! Все шутки в сторону, автоматически подключаемый компонент проксируется, поэтому имеет смысл, что если реестр компонентов обновляется новыми значениями, службы с введенным синглтоном будут иметь обновленные значения. Возникает вопрос о том, что произойдет, если будет добавлен тот же @Configuration @Bean метод @Scope(SCOPE_PROTOTYPE) . Поскольку @RefreshScope это специализированная область для конфигурации spring cloud, и поскольку аннотация не повторяется, я не уверен, что произойдет.