1

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

1 回答 1

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...)解析解析配置的方式。

于 2020-07-03T14:08:18.213 回答