Spring Cloud Refresh ConfigurationProperties

Я хочу перепривязать ConfigurationProperties данные. Прочтите пользовательскую документацию. post http://localhost:8080/env, работает. Но post http://localhost:8080/env/reset, не удается обновить все конфигурации. Можно обновить только те ключи, которые посетили /env. Я хочу обновить всю конфигурацию, что мне делать?

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


person xiao luo    schedule 20.06.2018    source источник


Ответы (1)


Отправка пар ключ-значение в /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)));
    }

}
person Addo Zhang    schedule 21.06.2018
comment
Спасибо за ваш ответ. /actuator/refresh stackoverflow.com/questions/49311068/ - person xiao luo; 21.06.2018