【发布时间】:2018-05-23 00:01:09
【问题描述】:
我已将我的应用程序设置为使用 Spring 云配置来提供配置并启用监视器,以便配置服务器将更改事件发布到我的应用程序。配置已正确更新,但我希望在配置更改时收到通知,以便我可以根据新配置执行一些自定义逻辑。
我有这个配置对象
@Configuration
@RefreshScope
@ConfigurationProperties(prefix = "my.prefix")
public class MyConfig {
private Map<String, MyObject> configs;
private String someValue;
public Map<String, MyObject> getConfigs(){...}
public void setConfigs(){...}
public String getSomeValue(){...}
public void setSomeValue(){...}
}
...
public class MyObject {
private String field1;
public String getField1() {...}
public void setField1() {...}
}
这在我的配置服务器 application.yml 中
my:
prefix:
configs:
TEST:
field1: "testValue"
someValue: "test"
现在,当我在配置中更改 someValue 并且配置服务器发布刷新时,它会调用 setSomeValue() 并将值更新为新值。我可以将我的自定义逻辑添加到 setSomeValue() 并且它会正常工作。但是,在从配置中更新或添加/删除条目时,它似乎没有调用 setConfigs() 或 setField1()。
我尝试为 EnviornmentChangeEvents、RefreshEvents 或 RefreshScopeRefreshedEvents 注册一个侦听器,但这些侦听器要么在 Spring 更新值之前触发,要么根本不触发。我还尝试向 @PreDestroy 和 @PostConstruct 方法添加逻辑,但只有 PreDestroy 最终被调用,并且在配置更新之前被调用。我也尝试实现 InitializingBean 并将我的逻辑放入 afterPropertiesSet() 但它也从未被调用过。
如何在此配置更新时收到通知?
【问题讨论】:
标签: java spring spring-boot spring-cloud spring-cloud-config