我正在编写测试代码来验证RESTful服务。我希望能够在执行测试之前简单地更改环境变量,从而在任何不同的环境中指出它。
我希望能够合并三个不同的配置文件:
conf/env/default.conf
- 默认配置值
适用于所有环境conf/env/<env>.conf
- 特定环境
值application.conf
- 用户对任何内容的覆盖
上述我的想法是,我不想在一个配置文件中包含所有内容,并且存在编辑错误的风险,导致配置项丢失。因此,请将它们分开,并让用户能够覆盖它们。
以下是它变得棘手的地方:default.conf
将包含$ {references}指向要在<env>.conf
中覆盖的内容,并且可能会在application.conf
中进一步覆盖。
我需要推迟解决,直到所有三个合并为止。我该怎么做?
答案 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()