在春季启动应用程序启动期间是否可以从Web服务加载属性?

时间:2018-08-06 23:00:08

标签: spring spring-boot properties external

我正在构建一个新的Spring Boot应用程序,该应用程序可部署到bluemix(云铸造厂),需要执行以下操作:

  1. 使用spring-cloud-cloudfoundry-connector查找用户提供的“属性服务”:从VCAP_APPLICATION env变量读取服务URL和凭据。 此步骤完成。

  2. 通过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,我想知道弹簧靴是否具有更好的处理外部属性的方法。

1 个答案:

答案 0 :(得分:0)

我最终用spring-cloud-config-server替换了“属性服务” 并使用spring-cloud-config-client
在我的spring boot应用程序中使用spring-cloud-config-server的属性。