#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, и поскольку аннотация не повторяется, я не уверен, что произойдет.