5

我正在使用类型安全配置,并且正在寻找一种简单的方法来允许可选地覆盖应用程序之间共享的配置文件中的属性。

假设我有 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

我知道我可以只为每个应用程序的 application.conf 中的“z”前缀执行此操作。例如

z = ${?a.z}

但我希望可能有一种方法可以一直移动到根节点。例如

MAGICAL_ROOT = ${?a}

我所希望的可能吗?

4

1 回答 1

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)

您可以阅读有关合并配置树的更多信息。

于 2020-08-30T07:33:32.917 回答