【问题标题】:CloudFoundry manifest.yml with objects as env variablesCloudFoundry manifest.yml 将对象作为环境变量
【发布时间】:2017-07-21 22:20:04
【问题描述】:

所以我正在构建一个 SpringBootApplication 并且我目前在 yml 中有以下设置:

my:
   caller:
      - id: someId
        url: someUrl
        context: someContext
      - id: someId2
        url: someUrl2
        context: someContext2

所以基本上它是一个对象列表(我创建了一个具有 3 个字段的 POJO)。这些对象在另一个类中表示为一个列表,该类是一个@Component 并具有一个@ConfigurationProperties(prefix = "my"),并且 POJO 的列表与@NestedConfigurationproperty 一起使用。 到目前为止一切正常,Spring 从 application.yml 构造对象并很好地填充列表,但是我无法在 CloudFoundry 中模拟这种配置。我正在为 cloudfoundry 使用不同的 manifest.yml,我试图将此结构放在清单的 env 部分,但它不起作用(Cloudfoundry 忽略它)。 它看起来像这样:

env:
   my:
   caller:
      - id: someId
        url: someUrl
        context: someContext
      - id: someId2
        url: someUrl2
        context: someContext2

我知道它可以通过简单的行来工作(例如 ev_my_caller_id),但这样我只能构造 1 个对象,而不是整个列表,而且我在 CloudFoundry 文档中没有找到关于如何从清单构造多个对象的任何内容。 如果有人有任何想法,我将不胜感激!

【问题讨论】:

    标签: spring-boot configuration yaml manifest cloud-foundry


    【解决方案1】:

    Cloud Foundry cli 的 manifest.yml 文件的 env 块具有特定格式。您不能使用任意结构并期望它能够工作。

    格式为:

    env: var_name_1: val_1 var_name_2: val_2

    查看文档了解更多详情 -> https://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html#env-block

    如果您使用正确的名称设置 env 变量,您可以使用它来覆盖 Spring 中的某些值。感谢 Spring Boot 的外部配置支持。也许这对你来说是一个选择。

    https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

    例如:MY_PROPERTY=1234 将覆盖 application.properties 中的 my.property

    【讨论】:

      【解决方案2】:

      您可以使用 Daniel 提供的 Spring Boot external config link 中提到的 SPRING_APPLICATION_JSON 环境变量。

      在你的情况下,这会是这样的:

      env:
        SPRING_APPLICATION_JSON: '{ "my": { "caller": [{ "id": "someId", "url": "someUrl", "context": "someContext" }, { "id": "someId2", "url": "someUrl2", "context": "someContext2" }]}}'
      

      【讨论】:

        【解决方案3】:

        不确定您要做什么,但您可以尝试以下方法:

        env:
          test: '{ whatever complex object/variables }'
        

        例如

        env:
          test: '{ variable = value, variable2 = value2 }'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-09
          • 2018-12-02
          • 1970-01-01
          • 2021-11-04
          • 1970-01-01
          • 2012-02-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多