【问题标题】:How to append to array in overridden YAML file (Spring)?如何附加到覆盖的 YAML 文件(Spring)中的数组?
【发布时间】:2019-12-18 12:07:07
【问题描述】:

我有一个包含application.yml 的 JAR。该 YAM 文件包含一个数组,例如:

things:
  - name: one
    color: red

我需要在运行时通过在与 JAR 相同的目录中添加一个额外的 application.yml 文件来调整此数组。但是,我不确定如何 追加 到数组,因为以下配置似乎替换了 JAR 中内置 YAML 文件中的配置:

things:
  - name: red
    color: blue

最后,在运行时,我需要这个:

things:
  - name: one
    color: red
  - name: two
    color: blue

【问题讨论】:

  • 你找到解决这个问题的方法了吗?
  • 不,我不认为它受支持。

标签: java spring spring-boot yaml


【解决方案1】:

好像有人问过a similar question。听起来好像不支持。查看文档,我发现 some older docs 表明它不受支持。

当在多个配置文件中指定一个集合时,使用具有最高优先级的一个(并且只使用那个):

foo:
  list:
    - name: my name
      description: my description
    - name: another name
      description: another description
---
spring:
  profiles: dev
foo:
  list:
     - name: my another name

在上面的示例中,考虑到开发配置文件处于活动状态,FooProperties.list 将包含一个 MyPojo 条目(名称为“我的另一个名称”且描述为空)。

A newer 2.6.0 snapshot doc 提到了相同的内容,但似乎鼓励您将密钥命名为它们自己的对象。您可能无法访问将它们引入的 bean,但如果可以的话,以这种方式构建其他 bean 可能会很好。

考虑以下配置:

my:
  map:
    key1:
      name: "my name 1"
      description: "my description 1"
---
spring:
  config:
    activate:
      on-profile: "dev"
my:
  map:
    key1:
      name: "dev name 1"
    key2:
      name: "dev name 2"
      description: "dev description 2"

如果开发配置文件未激活,MyProperties.map 包含一个带有键 key1 的条目(我的名字为 1,我的描述为 1)。但是,如果启用了开发配置文件,则映射包含两个条目,其键为 key1(名称为 dev 名称 1,描述为我的描述 1)和 key2(名称为 dev 名称 2,描述为 dev 描述 2) .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-04
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 2014-03-07
    • 2017-07-06
    • 2011-12-17
    相关资源
    最近更新 更多