【问题标题】:merging multiple levels of configuration using typesafe/akka config使用 typesafe/akka config 合并多级配置
【发布时间】:2016-01-16 21:36:10
【问题描述】:

我在看: 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

或者可能是 resources/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 方法,但这似乎是我想在一个文件中混合两种配置,而不是将资源/文件链接在一起。

【问题讨论】:

    标签: java scala configuration akka typesafe


    【解决方案1】:

    将多个withFallback 与优先级最高的配置一起使用。例如:

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

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

    【讨论】:

      猜你喜欢
      • 2015-02-26
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 2020-12-06
      相关资源
      最近更新 更多