【问题标题】:Is there a way to move a node up the root in HOCON?有没有办法在 HOCON 中将节点向上移动?
【发布时间】:2017-03-23 22:13:33
【问题描述】:

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

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

我所希望的可能吗?

【问题讨论】:

    标签: java config typesafe hocon


    【解决方案1】:

    根据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的信息。

    【讨论】:

    • 这似乎仍然只能设置 Z。我希望(并且仍然希望)能够将任意键提升到根级别。
    • 谢谢@ProgrammingGuy。我没有正确理解你的问题。我已经更新了我的帖子。
    • @ProgrammingGuy,这对你有帮助吗?
    • 它可能,下次我设置项目配置时,我会尝试这些方法,看看效果如何。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 2021-10-03
    • 2011-06-15
    相关资源
    最近更新 更多