Как загрузить измененную переменную среды в приложении весенней загрузки, запущенном в PCF, без перезапуска приложения? - PullRequest
0 голосов
/ 31 октября 2019

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

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

@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 в работающее приложение. Есть идеи, как этого добиться?

1 Ответ

2 голосов
/ 31 октября 2019

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...