【问题标题】:Spring Boot EnvironmentPostProcessor overriding Command LineSpring Boot EnvironmentPostProcessor 覆盖命令行
【发布时间】:2016-03-18 12:53:25
【问题描述】:

我正在使用EnvironmentPostProcessor,尤其是CloudFoundryVcapEnvironmentPostProcessor,以解析一些环境变量并使它们作为 Spring 属性访问。

当我运行我的应用程序时,EnvironmentPostProcessor 会启动并按预期创建所需的属性变量。

@Value("${vcap.services.test-service.name}") /* Example of a property loaded from PostProcessor. Works fine. */

但是,当我尝试使用命令行或属性文件显式设置此属性值时,我指定的值不会覆盖 EnvironmentPostProcessor 填充的值。我希望通过命令行覆盖这个属性应该优先。

vcap.services.test-service.name=TEST_VALUE 不覆盖。

基本上,我似乎无能为力来覆盖此 EnvironmentPostProcessor 设置的值(命令行、配置文件、.properties 文件、spring.factories 订单定义等)

有没有办法覆盖在 EnvironmentPostProcessor 中创建的属性值?

【问题讨论】:

    标签: spring spring-mvc spring-boot cloud-foundry


    【解决方案1】:

    这是由于CloudFoundryVcapEnvironmentPostProcessor 添加了一个优先级高于您用于覆盖属性的方法的属性源:https://github.com/spring-projects/spring-boot/blob/v1.3.3.RELEASE/spring-boot/src/main/java/org/springframework/boot/cloud/CloudFoundryVcapEnvironmentPostProcessor.java#L126-L135

    有那个块将它设置为低于命令行参数,你使用的是命令行参数还是 -D 系统属性?

    您可以尝试添加 spring-boot-starter-actuator 并点击 /env 端点以查看所有属性源及其优先级,首先出现的那些优先级高于出现在 JSON 中更下方的那些。作为最后的手段,您可以创建自己的EnvironmentPostProcessor,即Ordered,在CloudFoundryVcapEnvironmentPostProcessor 之后执行,这会创建具有最高优先级的属性源。

    【讨论】:

      猜你喜欢
      • 2020-03-04
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      • 2015-05-01
      相关资源
      最近更新 更多