Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java和YAML:如何解析多个YAML文档并将它们合并到单个YAML表示?_Java_Merge_Yaml_Snakeyaml - Fatal编程技术网

Java和YAML:如何解析多个YAML文档并将它们合并到单个YAML表示?

Java和YAML:如何解析多个YAML文档并将它们合并到单个YAML表示?,java,merge,yaml,snakeyaml,Java,Merge,Yaml,Snakeyaml,假设我有一个文件,defaults.yaml: pool: idleConnectionTestPeriodSeconds: 30 idleMaxAgeInMinutes: 60 partitionCount: 4 acquireIncrement: 5 username: dev password: dev_password pool: username: prod password: prod_password 还有另一个文件,production.yam

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

pool:
  idleConnectionTestPeriodSeconds: 30
  idleMaxAgeInMinutes: 60
  partitionCount: 4
  acquireIncrement: 5
  username: dev
  password: dev_password
pool:
  username: prod
  password: prod_password
还有另一个文件,
production.yaml

pool:
  idleConnectionTestPeriodSeconds: 30
  idleMaxAgeInMinutes: 60
  partitionCount: 4
  acquireIncrement: 5
  username: dev
  password: dev_password
pool:
  username: prod
  password: prod_password
在运行时,如何读取这两个文件并将它们合并为一个文件,以便应用程序“看到”以下内容

pool:
  idleConnectionTestPeriodSeconds: 30
  idleMaxAgeInMinutes: 60
  partitionCount: 4
  acquireIncrement: 5
  username: prod
  password: prod_password
比如说,SnakeYAML有可能实现这一点吗?还有其他工具吗


我知道一种选择是将多个文件作为贴图读取,然后自己合并,将合并渲染为一个临时文件,然后读取,但这是一种重量级的解决方案。现有工具已经可以这样做了吗?

您可以使用Jackson,关键是使用ObjectMapper.ReaderForUpdate()并使用@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>

我不认为一个现有的工具会比你想做的事情做得更“重”——另一个选择是跳过临时文件,只是在内存中合并贴图。最后!五年后的答案!!!:)这仍然是赞赏-答案授予。非常感谢。