如何附加到覆盖的 YAML 文件(Spring)中的数组?

Posted

技术标签:

【中文标题】如何附加到覆盖的 YAML 文件(Spring)中的数组?【英文标题】:How to append to array in overridden YAML file (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

【问题讨论】:

你找到解决这个问题的方法了吗? 不,我不认为它受支持。 【参考方案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) .

【讨论】:

以上是关于如何附加到覆盖的 YAML 文件(Spring)中的数组?的主要内容,如果未能解决你的问题,请参考以下文章

通过环境变量覆盖 Spring Boot yaml 属性

如何在 bash 中将 json 响应转换为 yaml

如何将 SpringBoot 配置外部文件覆盖到类路径文件?

如何在复制粘贴时覆盖 VS Code 中的文件(而不是将 *.1* 附加到文件名)?

如何从SharedPreferences文件中正确地将文本附加到TextView而不是覆盖它?

Spring Boot 2从入门到入坟 | 配置文件篇:yaml语法详解