Я создаю новое приложение для весенней загрузки, развертываемое в bluemix (облачное хранилище), которое должно делать следующее:
используйте spring-cloud-cloudfoundry-connector для обнаружения предоставляемой пользователем «службы свойств»: прочтите URL-адрес службы и учетные данные из переменной env VCAP_APPLICATION. Этот шаг завершен.
подключиться к службе свойств через HTTP-вызов, получить ответ JSON, проанализировать отдельные значения свойств и предоставить их как свойства приложения (в объекте Environment?)
Что было бы правильным решением для этого в приложении с весенней загрузкой?
В более старом приложении Spring без загрузки вызов службы свойств будет инициирован в начале жизненного цикла Spring классом, который расширяет PropertySourcesPlaceholderConfigurer, и сбор свойств из службы будет обрабатываться внутри вызова метода postProcessBeanFactory () того же класса.
public class CustomPopertiesFactory
extends PropertySourcesPlaceholderConfigurer
implements EnvironmentAware {
private Properties properties;
getServiceCredentials() {
// parse VCAP_APPLICATION json
final String localVcapServices = System.getProperty("VCAP_SERVICES");
// extract url, username, pwd to connect to the service
}
connectToService () {
// via HTTP request using RestTemplate
// parse JSON response and add properties to this.properties
... this.properties.put("prop1", valueFromJson);
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
getServiceCredentials();
connectToService();
// load values from properties service into app properties
setProperties(properties);
// continue with lifecycle and load properties from other sources
super.postProcessBeanFactory(beanFactory);
}
}
Было больно поддерживать и переключаться между облачными и локальными профилями пружины IMO, и мне интересно, есть ли у Spring Boot лучший способ обработки внешних свойств.
В итоге я заменил "службу свойств" на Spring-облако-конфигурация-сервер
и используя Spring-облако-конфигурация-клиент
в моем приложении весенней загрузки, чтобы использовать свойства из spring-cloud-config-server.