所以我正在构建一个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文档中找到任何关于如何构造多个对象的内容。表现。 如果有人有任何想法我会非常感激!
答案 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 }'