如果使用替换,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
不会发生这种情况。
问题:
- 这个输出的原因是什么?
- 如何才能同时解析“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.conf
和 reference.conf
文件,我建议只使用 load*
方法。或者使用 ConfigFactory.load(ConfigFactory.parse...)
解析解析配置的方式。
我正在使用 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
不会发生这种情况。
问题:
- 这个输出的原因是什么?
- 如何才能同时解析“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.conf
和 reference.conf
文件,我建议只使用 load*
方法。或者使用 ConfigFactory.load(ConfigFactory.parse...)
解析解析配置的方式。