Весеннее облачное обновление ConfigurationProperties
Я хочу перепривязать ConfigurationProperties
Данные. Читайте пользовательскую документацию.post http://localhost:8080/env
Это работает. Но post http://localhost:8080/env/reset
, Не удается обновить все конфигурации. Можно только обновить ключи, которые посетили /env
, Я хочу обновить все настройки, что мне делать?
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)));
}
}