Java 和 YAML : how to parse multiple yaml documents and merge them to a single YAML representation?

标签 java merge yaml snakeyaml

假设我有一个文件,defaults.yaml:

pool:
  idleConnectionTestPeriodSeconds: 30
  idleMaxAgeInMinutes: 60
  partitionCount: 4
  acquireIncrement: 5
  username: dev
  password: dev_password

和另一个文件,production.yaml:

pool:
  username: prod
  password: prod_password

在运行时,我如何读取这两个文件并将它们合并为一个文件,以便应用程序“看到”以下内容?

pool:
  idleConnectionTestPeriodSeconds: 30
  idleMaxAgeInMinutes: 60
  partitionCount: 4
  acquireIncrement: 5
  username: prod
  password: prod_password

比方说,SnakeYAML 这可能吗?还有其他工具吗?

我知道一个选择是将多个文件作为 map 读取,然后自己合并它们,将合并呈现为单个临时文件,然后读取它,但这是一个重量级的解决方案。现有工具可以做到这一点吗?

最佳答案

您可以使用 Jackson,关键是使用 ObjectMapper.readerForUpdating() 并使用 @JsonMerge 注释该字段(或者下一个对象中所有缺失的字段将覆盖旧的):

专家:

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.9</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-yaml</artifactId>
        <version>2.9.9</version>
    </dependency>

代码:

public class TestJackson {
    public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
        MyConfig myConfig = new MyConfig();
        ObjectReader objectReader = mapper.readerForUpdating(myConfig);
        objectReader.readValue(new File("misc/a.yaml"));
        objectReader.readValue(new File("misc/b.yaml"));
        System.out.println(myConfig);
    }

    @Data
    public static class MyConfig {
        @JsonMerge
        private Pool pool;
    }

    @Data
    public static class Pool {
        private Integer idleConnectionTestPeriodSeconds;
        private Integer idleMaxAgeInMinutes;
        private Integer partitionCount;
        private Integer acquireIncrement;
        private String username;
        private String password;
    }
}

关于Java 和 YAML : how to parse multiple yaml documents and merge them to a single YAML representation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26345179/

相关文章:

java - Pact 提供者测试的范围应该是什么?

python - 在python中合并来自两个不同列表的DF

c++ - 使用 libxml2 缩进合并的 xml 文件

symfony - 如何访问 Symfony2 中的嵌套参数值?

python - YML文件打印错误的次数

java - 如何使用基于 JDK 11 的 Java 应用程序使用 Java Soap Web 服务

java - oracle db id列自动生成JPA JSF

java - 使用 TLS 运行简单示例时 channel 关闭

R 展开一个 data.table

web-scraping - 如何修复 yaml 文件中的 "mapping values are not allowed in this context "错误?