gpt4 book ai didi

java - 在类型安全配置中加载时禁止解析

转载 作者:搜寻专家 更新时间:2023-11-01 01:51:20 26 4
gpt4 key购买 nike

我想禁止解析a.b。我想从另一个配置中替换 param。像这样:

val d = ConfigFactory.load(ConfigFactory.parseString(
"""
|param = x
|a.b = ${param}
""".stripMargin))

val a = ConfigFactory.parseString("param = 1")

val result = a.withFallback(d).resolve()

在这种情况下,param 获得值 1,但 a.b 仍然是 x我尝试在加载配置 d 时设置 ConfigResolveOptions.defaults().setAllowUnresolved(true),但这不起作用。

我怎样才能克服这个问题?

最佳答案

问题是 Config.load 正在立即解析替换。如果你把它拿出来,它就会像你想要的那样解决:

val p = ConfigFactory.parseString(
"""
|param = x
|a.b = ${param}
""".stripMargin)

val a = ConfigFactory.parseString("param = 1")

val result = a.withFallback(p).resolve()

println(result.getString("a.b"))

这会打印 1。

你不需要使用Config.load,除非你想使用reference.conf等。如果你确实想使用Config.load 那么你应该在使用 withFallback 将所有配置组合在一起后执行此操作。

例如,这也打印 1:

  val p = ConfigFactory.parseString(
"""
|param = x
|a.b = ${param}
""".stripMargin)

val d = ConfigFactory.load(p)
val a = ConfigFactory.parseString("param = 1")

val result = a.withFallback(p)
val loaded = ConfigFactory.load(result)
println(loaded.getString("a.b"))

或者,假设您有一个带有 includeapplication.conf,您希望将其与 ConfigFactory.load() 一起使用(根据您的评论).

如果 application.conf 看起来像

include "foo"

foo.conf 看起来像

a.b = ${param}

然后这也打印 1:

  val a = ConfigFactory.parseString("param = 1")  

val app = ConfigFactory.load("application", ConfigParseOptions.defaults,
ConfigResolveOptions.defaults.setAllowUnresolved(true))

val result = a.withFallback(app).resolve

println(result.getString("a.b"))

一般来说,如果您希望 A 覆盖 B 以覆盖 C,那么您应该使用 A.withFallback(B).withFallback(C)

关于java - 在类型安全配置中加载时禁止解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30129421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com