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

nai*_*rbv 3 java configuration scala akka typesafe

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

假设我想要一个默认配置,例如reference.conf,然后我想要dev/prod覆盖(两个不同的application.conf),然后我还想要从这两个应用程序继承的特定于主机的覆盖.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
Run Code Online (Sandbox Code Playgroud)

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

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

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

getConfigurations("dev/master.conf").withDefaultsFrom(
    getConfigurations("dev/application.conf").withDefaultsFrom(
        getConfigurations("resource.conf"))
Run Code Online (Sandbox Code Playgroud)

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

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

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

sou*_*ica 5

首先使用withFallback具有最高优先级的配置的倍数.例如:

Config finalConfig = 
  ConfigFactory.systemProperties().
    withFallback(masterConfig).
    withFallback(applicationConfig).
    withFallback(referenceConfig)
Run Code Online (Sandbox Code Playgroud)

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