Измените uri сервера Spring Cloud Config после запуска

Я загружаю свое приложение springboot, чтобы указать на сервер конфигурации по умолчанию для получения реквизитов конфигурации при запуске, сервер конфигурации изменяет spring.cloud.config.uri (не спрашивайте меня, почему: D), чтобы указать на другой сервер конфигурации ... когда я вызываю Конечная точка /actuator/refresh Я хочу иметь возможность переключить uri сервера конфигурации на новый, который я только что получил.

Я посмотрел на исходный код весеннее облако-конфигурация, но бины там, похоже, не помечены @RefreshScope.

Springboot env /actuator/env, похоже, показывает новый полученный uri, но клиентские компоненты конфигурации по-прежнему указывают на uri начальной загрузки.

Любые предложения о том, как этого добиться? Я новичок в использовании Springboot.

Спасибо!

Использование Service Discovery для поиска на сервере конфигурации, вероятно, самое близкое, что я могу придумать, cloud.spring.io/spring-cloud-static/Finchley.SR1/single/…

spencergibb 06.08.2018 21:20

Спасибо за предложение, пока не могу использовать Service Discovery, ищу что-то без обнаружения сервиса.

SKK 07.08.2018 23:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
207
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для всех, кто пытается сделать то же самое, я удалил конфигурацию облака Spring из первоначального запуска и добавил ее по мере необходимости, выполнив setConfigUri, а затем refreshObjects, и, похоже, он получает конфигурацию с сервера конфигурации. (Не забудьте добавить spring-cloud-config и зависимости в pom.xml)

Вот что я сделал, и, похоже, до сих пор это служит цели. Не стесняйтесь звонить, если что-то кажется неправильным.

@Autowired
private ConfigurableEnvironment env;

@Autowired
private ConfigurableApplicationContext applicationContext;

@Autowired
private ContextRefresher refresher;

public void setConfigUri(String uri) throws Exception {
    MutablePropertySources propertySources = env.getPropertySources();
    Map<String, Object> map = new HashMap<>();
    map.put("spring.cloud.config.uri", uri);
    propertySources.addFirst(new MapPropertySource("defaultProperties", map));
    applicationContext.setEnvironment(env);
}

public void refreshObjects() throws Exception {
    refresher.refresh();
}

Вместо того, чтобы публиковать сообщения самому себе, автоматически подключите объект ContextRefresher и вызовите refresh().

spencergibb 13.08.2018 22:07

Спасибо, не знал, если это. Я добавил его и, похоже, работает, как ожидалось! - К.К.

SKK 13.08.2018 23:15

Вы можете изменить среду Spring, разместив сообщение на /env

spencergibb 13.08.2018 23:16

ой, никогда не думал об этом! вероятно, лучший способ сделать это. Спасибо!

SKK 13.08.2018 23:21

Другие вопросы по теме