使用 typesafe/akka config 合并多级配置
merging multiple levels of configuration using typesafe/akka config
我在看:
https://github.com/typesafehub/config
假设我想要一个默认配置,例如reference.conf,然后我想要 dev/prod 覆盖(两个不同的 application.conf),然后我还希望拥有从 [=36= 继承的特定于主机的覆盖] 和最终的默认值 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 方法,但如果我想在一个文件中混合两种配置,而不是将 resources/files 链接在一起。
首先使用多个 withFallback
,优先级最高的配置。例如:
Config finalConfig =
ConfigFactory.systemProperties().
withFallback(masterConfig).
withFallback(applicationConfig).
withFallback(referenceConfig)
像 masterConfig
这样的每个配置都会加载 Config.parseFile
。您也可以使用 ConfigFactor.load
来方便,但 parseXXX
方法可以让您更好地控制层次结构。
我在看: https://github.com/typesafehub/config
假设我想要一个默认配置,例如reference.conf,然后我想要 dev/prod 覆盖(两个不同的 application.conf),然后我还希望拥有从 [=36= 继承的特定于主机的覆盖] 和最终的默认值 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 方法,但如果我想在一个文件中混合两种配置,而不是将 resources/files 链接在一起。
首先使用多个 withFallback
,优先级最高的配置。例如:
Config finalConfig =
ConfigFactory.systemProperties().
withFallback(masterConfig).
withFallback(applicationConfig).
withFallback(referenceConfig)
像 masterConfig
这样的每个配置都会加载 Config.parseFile
。您也可以使用 ConfigFactor.load
来方便,但 parseXXX
方法可以让您更好地控制层次结构。