CloudFoundry manifest.yml,对象为env变量

时间:2017-03-02 09:17:35

标签: spring-boot configuration yaml manifest cloudfoundry

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

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

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

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

我知道它有简单的线条(例如ev_my_caller_id),但是这样我只能构造一个对象,而不是整个列表,我还没有在CloudFoundry文档中找到任何关于如何构造多个对象的内容。表现。 如果有人有任何想法我会非常感激!

3 个答案:

答案 0 :(得分:1)

您可以使用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" }]}}'

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

不确定你要做什么,但你可以尝试这样的事情:

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

e.g。

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