好的,所以当我一个月前发布这个问题时,我显然对此很陌生,而且很天真。从那以后,我了解到@ConfigurationProperties
当 spring 云配置客户端刷新时会更新。假设你有一个 bean(lombok 以减少样板,当然):
@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 配置服务器正在服务的配置文件,然后refresh
在客户端调用执行器端点,底层 bean 将被更新,任何连接了这个 bean 的服务在刷新后都会有一个更新的 bean。
所以,为 Spring 如此出色地实现这个神奇的巫术魔法而喝彩!撇开开玩笑,自动装配的 bean 是代理的,所以如果 bean 注册表用新值更新,那么注入单例的服务将具有更新的值是有意义的。@Configuration @Bean
这就提出了如果添加相同的方法会发生什么的问题@Scope(SCOPE_PROTOTYPE)
。由于@RefreshScope
是 Spring Cloud 配置的专用范围,并且由于注释不可重复,因此我不确定会发生什么。