合并多个TypeSafe Config文件,并在它们全部合并后才进行解析

Joh*_*ood 24 merge typesafe-config

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

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

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

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

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

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

Joh*_*ood 36

答案是用来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 = ConfigFactory.load()
                          .withFallback(userConfig)
                          .withFallback(environmentConfig)
                          .withFallback(defaultConfig)
                          .resolve()
Run Code Online (Sandbox Code Playgroud)

  • 这可能应该在这里https://github.com/typesafehub/config变得更清楚 (2认同)
  • 您应该使用 `.empty()` 而不是 `.load()` 以确保 `defaultConfig` 用作 __fallback__ (2认同)