我正在使用typesafe配置,而我正在寻找一种简单的方法来允许在应用程序之间共享的配置文件中对属性进行可选的覆盖。
所以我想说我有2个应用程序,A& B.他们都使用模块Z.他们都加载了共享配置文件' shared.conf'。
模块Z在其reference.conf
中定义了一个属性z.foo=bar
我希望能够
#override the property for both A & B
z.foo=zap
或
#override the property for just A
a.z.foo=zip
我知道我可以为这个' z'每个应用程序的application.conf中的前缀。 e.g。
z = ${?a.z}
但我希望可能有一种方法可以一直移动到根节点。 e.g。
MAGICAL_ROOT = ${?a}
我希望有可能吗?
答案 0 :(得分:0)
根据config github存储库中的文档,将子树提升到根的方法不是在配置本身中,而是在代码中。
我会引用:
您还可以使用withFallback合并一些硬编码的值,或将子树“提升”到配置的根目录。说你有类似的东西:
foo=42 dev.foo=57 prod.foo=10
然后您可以编写类似以下内容的代码:
Config devConfig = originalConfig .getConfig("dev") .withFallback(originalConfig)
在您的情况下,您需要以下内容:
Config aConfig = originalConfig
.getConfig("a")
.withFallback(originalConfig)
您可以了解有关Merging config trees的更多信息。