【问题标题】:HOCON does not override value in case substitution is used如果使用替换,HOCON 不会覆盖值
【发布时间】:2020-07-03 22:13:19
【问题描述】:

我正在使用一个 HOCON 配置文件,它也有替换变量。但是在替换变量的情况下,键不会被同一个文件中的另一个值覆盖。 例如,考虑以下 HOCON 配置:

    {
        "x":5
        "x":6
        "y":{"a":1}
        "y":{"a":11}
        "z":${y.a}
        "z":${y.a}
    }

现在当我从 ConfigFactor.parseURL 加载它时,结果配置是:

{"x":6,"y":{"a":11},"z":${y.a},"z":${y.a}}

这里y 必须解决,但z 不会发生这种情况。

问题:

  1. 这个输出的原因是什么?
  2. 如何才能同时解析“z”?

【问题讨论】:

    标签: scala jvm config typesafe hocon


    【解决方案1】:

    您只是在解析配置文件而不解析它。你必须调用resolve() 方法。

    检查以下示例

    val options: ConfigRenderOptions = ConfigRenderOptions
      .defaults()
      .setComments(false)
      .setOriginComments(false)
      .setFormatted(false)
      .setJson(true)
    
    val parsed = ConfigFactory.parseString("""
    |{
    | "x":5
    | "x":6
    | "y":{"a":1}
    | "y":{"a":11}
    | "z":${y.a}
    | "z":${y.a}
    |}
    |""".stripMargin)
    
    println(parsed.root().render(options))
    println(parsed.resolve().root().render(options))
    
    

    打印

    {"x":6,"y":{"a":11},"z":${y.a},"z":${y.a}}
    {"x":6,"y":{"a":11},"z":11}
    
    

    请注意parse/resolve 方法用于高级/自定义配置加载。

    如果您只是加载 application.confreference.conf 文件,我建议仅使用 load* 方法。或者使用ConfigFactory.load(ConfigFactory.parse...)的方式解析解析的配置。

    【讨论】:

      猜你喜欢
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多