我正在构建一个新的Spring Boot应用程序,该应用程序可部署到bluemix(云铸造厂),需要执行以下操作:
使用spring-cloud-cloudfoundry-connector查找用户提供的“属性服务”:从VCAP_APPLICATION env变量读取服务URL和凭据。 此步骤完成。
通过HTTP调用连接到属性服务,接收JSON响应,解析单个属性值并将其公开为应用程序属性(在“环境”对象中?)
在spring-boot应用程序中什么是正确的解决方案?
在较旧的非启动Spring应用程序中,属性服务调用将在Spring生命周期的早期由扩展PropertySourcesPlaceholderConfigurer的类启动,并且该服务中的属性集合将在同一类的postProcessBeanFactory()方法调用中进行处理。 / p>
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,我想知道弹簧靴是否具有更好的处理外部属性的方法。
答案 0 :(得分:0)
我最终用spring-cloud-config-server替换了“属性服务”
并使用spring-cloud-config-client
在我的spring boot应用程序中使用spring-cloud-config-server的属性。