如果使用替换,HOCON 不会覆盖值

HOCON does not override value in case substitution is used

我正在使用 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”?

您只是在解析配置文件而没有解析它。您必须调用 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 方法用于 advanced/customised 配置加载。

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