Java 使用typesafe/akka config合并多个级别的配置
我在看: 假设我希望有一个默认配置,例如reference.conf,然后我希望有dev/prod覆盖(两个不同的application.conf),然后我还希望有从application.conf和默认reference.conf继承的主机特定覆盖。我该怎么做 e、 我在想象一个目录结构,比如:Java 使用typesafe/akka config合并多个级别的配置,java,scala,configuration,akka,typesafe,Java,Scala,Configuration,Akka,Typesafe,我在看: 假设我希望有一个默认配置,例如reference.conf,然后我希望有dev/prod覆盖(两个不同的application.conf),然后我还希望有从application.conf和默认reference.conf继承的主机特定覆盖。我该怎么做 e、 我在想象一个目录结构,比如: resources/reference.conf resources/prod/application.conf resources/prod/master.conf resources/prod/
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
getConfigurations("dev/master.conf").withDefaultsFrom(
getConfigurations("dev/application.conf").withDefaultsFrom(
getConfigurations("resource.conf"))
或者可能是resources/dev/master/application.conf
我会在某个地方指定一个环境,即可能从启动应用程序的主机名中提取
如果应用程序是master.dev.example.com,我希望我能够执行以下操作:
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
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方法,但是如果我想在一个文件中混合使用两种配置,而不是将资源/文件链接在一起。首先对优先级最高的配置使用multiple
withFallback
。例如:
Config finalConfig =
ConfigFactory.systemProperties().
withFallback(masterConfig).
withFallback(applicationConfig).
withFallback(referenceConfig)
像masterConfig
这样的每个配置都会加载Config.parseFile
。您还可以使用ConfigFactor.load
作为一种方便,但是parseXXX
方法可以让您更好地控制层次结构