春季云刷新ConfigurationProperties

时间:2018-06-20 05:39:28

标签: spring refresh spring-cloud endpoints configurationproperties

我想重新绑定ConfigurationProperties数据。请阅读用户文档。 post http://localhost:8080/env,它正在工作。 但是post http://localhost:8080/env/reset无法刷新所有配置。 只能刷新访问过/env的密钥。 我想刷新所有配置该怎么办?

http://projects.spring.io/spring-cloud/spring-cloud.html#_endpoints

1 个答案:

答案 0 :(得分:0)

将键值对发布到/env将触发rebinding。 如果/env/reset属性源不为空,则发布到manager也会触发。

如果您不是通过发布/env来更新环境,则可以使用端点/refresh

@ManagedOperation
public Map<String, Object> reset() {
    Map<String, Object> result = new LinkedHashMap<String, Object>(map);
    if (!map.isEmpty()) {
        map.clear();
        publish(new EnvironmentChangeEvent(publisher, result.keySet()));
    }
    return result;
}

@ManagedOperation
public void setProperty(String name, String value) {

    if (!environment.getPropertySources().contains(MANAGER_PROPERTY_SOURCE)) {
        synchronized (map) {
            if (!environment.getPropertySources().contains(MANAGER_PROPERTY_SOURCE)) {
                MapPropertySource source = new MapPropertySource(
                        MANAGER_PROPERTY_SOURCE, map);
                environment.getPropertySources().addFirst(source);
            }
        }
    }

    if (!value.equals(environment.getProperty(name))) {
        map.put(name, value);
        publish(new EnvironmentChangeEvent(publisher, Collections.singleton(name)));
    }

}