合并多个TypeSafe配置文件并仅在它们全部合并后解析

时间:2016-03-03 17:37:50

标签: merge typesafe-config

我正在编写测试代码来验证RESTful服务。我希望能够在执行测试之前简单地更改环境变量,从而在任何不同的环境中指出它。

我希望能够合并三个不同的配置文件:

  • conf/env/default.conf - 默认配置值 适用于所有环境
  • conf/env/<env>.conf - 特定环境 值
  • application.conf - 用户对任何内容的覆盖 上述

我的想法是,我不想在一个配置文件中包含所有内容,并且存在编辑错误的风险,导致配置项丢失。因此,请将它们分开,并让用户能够覆盖它们。

以下是它变得棘手的地方:default.conf将包含$ {references}指向要在<env>.conf中覆盖的内容,并且可能会在application.conf中进一步覆盖。

我需要推迟解决,直到所有三个合并为止。我该怎么做?

1 个答案:

答案 0 :(得分:28)

答案是使用ConfigFactory.parseResource()代替ConfigFactory.load()

这是完成的结果

private lazy val defaultConfig     = ConfigFactory.parseResources("conf/env/default.conf")
private lazy val environmentConfig = ConfigFactory.parseResources("conf/env/" + env + ".conf" )
private lazy val userConfig        = ConfigFactory.parseResources("application.conf")
private lazy val config = userConfig
                          .withFallback(environmentConfig)
                          .withFallback(defaultConfig)
                          .resolve()