Как загрузить измененную переменную среды в приложение загрузки Spring, работающее в PCF, без перезапуска приложения?

У нас есть приложение весенней загрузки, работающее в PCF, и оно считывает переменные среды PCF (CF_INSTANCE_INDEX, CF_INSTANCE_ADDR, ..) из приложения. На основе этих переменных мы пытаемся реализовать логику планировщика. При запуске этого планировщика значения этих переменных могли измениться. Есть ли способ обновить / перезагрузить bean-компонент, который имеет значения env во время выполнения?

мы использовали аннотацию @RefreshScope в компоненте свойств конфигурации.

@Configuration
@RefreshScope
public class PcfEnvProperties{

@Value("${CF_INSTANCE_INDEX}")
private int intanceIndex;

@Value("${CF_INSTANCE_ADDR}")
private String intanceAddr;

...
}

и обновите, используя

context.getBean(RefreshScope.class).refresh("PcfEnvProperties");
PcfEnvProperties pcfEnv = context.getBean(PcfEnvProperties.class);

Но он не загружает недавно измененную переменную env в работающее приложение. Есть идеи, как этого добиться?


person achyutdev    schedule 31.10.2019    source источник


Ответы (1)


Вы можете использовать Spring Cloud Config Server в сочетании с Spring Actuator, чтобы предоставить конечную точку в вашей службе, которая будет обновлять свойства приложения на лету. Вы можете настроить свой планировщик так, чтобы он попадал в эту конечную точку по таймеру или по мере необходимости.

Вот один учебник, который мне кажется довольно простым: https://jeroenbellen.com/manage-and-reload-spring-application-properties-on-the-fly/

Возможно, вам придется поиграть с настройкой в ​​зависимости от того, как настроена ваша платформа, но я считаю, что она должна делать то, что вы хотите. Мы развернули множество веб-сервисов Java на нашей платформе PCF, используя этот подход к серверу привода / конфигурации, и мы можем просто вызвать конечную точку обновления, и она успешно извлекает (и при необходимости перезаписывает) новые свойства и значения с сервера конфигурации. . Также вы можете вытащить список имен свойств и значений, которые изменились из ответа.

Я не знаком с конкретными значениями свойств, которые вы упомянули, но пока они обычно являются частью Spring ApplicationContext (где обычно находятся свойства), вы должны иметь возможность извлекать измененные значения, используя этот подход с помощью облачного сервера конфигурации Spring. и библиотеки приводов.

Надеюсь это поможет

person nickcin    schedule 31.10.2019