我在看: 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方法,但似乎我想在一个文件中混合两种配置,而不是将资源/文件链接在一起。
答案 0 :(得分:5)
对首先具有最高优先级的配置使用多个withFallback
。例如:
Config finalConfig =
ConfigFactory.systemProperties().
withFallback(masterConfig).
withFallback(applicationConfig).
withFallback(referenceConfig)
masterConfig
等每个配置都会加载Config.parseFile
。您也可以使用ConfigFactor.load
作为方便,但parseXXX
方法可让您更好地控制层次结构。