spring-cloud-config - 当 spring 云配置项刷新时,有没有办法在客户端知道能够重新计算一些东西?
问题描述
使用spring cloud config,当我更新配置并在任何客户端上调用刷新时,有没有办法通知我发生了这种情况?如果我基于 some 构造对象@ConfigurationProperties
,我将希望使用这些分层属性的新状态来刷新这些对象。每次我需要引用配置道具时,我宁愿不执行查找;就我而言,最好在配置更改时刷新某些对象。那么,有没有办法进入刷新生命周期?
编辑:理想情况下,如果我能让一个@Configuration
班级知道刷新事件,并重新绑定/重新实例化一些相关@Bean
的 Spring ,那将是非常理想的!
解决方案
好的,所以当我一个月前发布这个问题时,我显然对此很陌生,而且很天真。从那以后,我了解到@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 配置的专用范围,并且由于注释不可重复,因此我不确定会发生什么。
推荐阅读
- node.js - dockerfile - NJS-045:无法为 Node.js 10.16.0(linux、x64)加载 oracledb 附加二进制文件
- c# - 当属性路径为空时,WPF 绑定转换器不运行
- apache-kafka - Kafka 日志保留工作异常,为什么?
- .net-core - 搭建数据库后如何运行迁移
- curl - 为什么我不能将切片更改为 H512?
- python - 会话过期后如何自动触发删除?
- c# - TFS vNext TestRunner 忽略双 dll
- node.js - 编译和启动服务器后,服务器上的 Angular 页面为空白
- null - IonRouterOutlet 由 @ViewChildren(IonRouterOutlet) 返回 null
- testing - 如何在 CircleCI 上测试类似 mamp 的设置