使用typesafe / akka config合并多个配置级别

时间:2015-10-18 14:33:30

标签: java scala configuration akka typesafe

我在看: https://github.com/typesafehub/config

假设我想要一个默认配置,例如reference.conf,然后我想要dev / prod覆盖(两个不同的application.conf),然后我也想要从application.conf继承主机特定的覆盖,最后是默认的reference.conf。我该怎么做?

例如,我想象的目录结构如下:

resources/reference.conf
resources/prod/application.conf
resources/prod/master.conf
resources/prod/slave.conf
resources/dev/application.conf
resources/dev/master.conf
resources/dev/slave.conf

或许它可能是资源/ dev / master / application.conf?

某处我会指定一个环境,即可能从应用程序启动的主机名中提取出来。

如果应用程序是master.dev.example.com,我希望我能够做类似的事情:

getConfigurations("dev/master.conf").withDefaultsFrom(
    getConfigurations("dev/application.conf").withDefaultsFrom(
        getConfigurations("resource.conf"))

但是我很难理解使用给定库的确切结果。

我看到我可以设置一个config.resource系统属性,但它看起来只允许一级覆盖,dev-application.conf - > resources.conf,不像master-node.conf - > dev-application.conf - > resources.conf。

我看到一个.withFallback方法,但似乎我想在一个文件中混合两种配置,而不是将资源/文件链接在一起。

1 个答案:

答案 0 :(得分:5)

对首先具有最高优先级的配置使用多个withFallback。例如:

Config finalConfig = 
  ConfigFactory.systemProperties().
    withFallback(masterConfig).
    withFallback(applicationConfig).
    withFallback(referenceConfig)

masterConfig等每个配置都会加载Config.parseFile。您也可以使用ConfigFactor.load作为方便,但parseXXX方法可让您更好地控制层次结构。