Scala 在配置中更改镶木地板路径(类型安全)
Scala changing parquet path in config (typesafe)
目前我有这样一个配置文件:
project {
inputs {
baseFile {
paths = ["project/src/test/resources/inputs/parquet1/date=2020-11-01/"]
type = parquet
applyConversions = false
}
}
}
我想在 运行 时间内将日期“2020-11-01”更改为另一个日期。我读到我需要一个新的配置对象,因为它是不可变的,我正在尝试这个,但我不太确定如何编辑路径,因为它是一个列表而不是一个字符串,它肯定需要是一个列表,否则它会说我还没有为镶木地板配置路径。
val newConfig = config.withValue("project.inputs.baseFile.paths"(0),
ConfigValueFactory.fromAnyRef("project/src/test/resources/inputs/parquet1/date=2020-10-01/"))
但我得到了:
Error com.typesafe.config.ConfigException$BadPath: path parameter: Invalid path 'project.inputs.baseFile.': path has a leading, trailing, or two adjacent period '.' (use quoted "" empty string if you want an empty element)
设置新路径的正确方法是什么?
您有一个选择,就是覆盖整个数组:
import scala.collection.JavaConverters._
val mergedConfig = config.withValue("project.inputs.baseFile.paths",
ConfigValueFactory.fromAnyRef(Seq("project/src/test/resources/inputs/parquet1/date=2020-10-01/").asJava))
但更优雅的方法(恕我直言)是创建一个新的 config
,并使用现有的作为后备。
例如我们可以新建一个config
:
val newJsonString = """project {
|inputs {
|baseFile {
| paths = ["project/src/test/resources/inputs/parquet1/date=2020-10-01/"]
|}}}""".stripMargin
val newConfig = ConfigFactory.parseString(newJsonString)
现在合并它们:
val mergedConfig = newConfig.withFallback(config)
输出:
println(mergedConfig.getList("project.inputs.baseFile.paths"))
println(mergedConfig.getString("project.inputs.baseFile.type"))
是:
SimpleConfigList(["project/src/test/resources/inputs/parquet1/date=2020-10-01/"])
parquet
符合预期。
您可以阅读有关 Merging config trees. Code run at Scastie 的更多信息。
我没有找到用 withValue
替换数组中的一个元素的方法。
目前我有这样一个配置文件:
project {
inputs {
baseFile {
paths = ["project/src/test/resources/inputs/parquet1/date=2020-11-01/"]
type = parquet
applyConversions = false
}
}
}
我想在 运行 时间内将日期“2020-11-01”更改为另一个日期。我读到我需要一个新的配置对象,因为它是不可变的,我正在尝试这个,但我不太确定如何编辑路径,因为它是一个列表而不是一个字符串,它肯定需要是一个列表,否则它会说我还没有为镶木地板配置路径。
val newConfig = config.withValue("project.inputs.baseFile.paths"(0),
ConfigValueFactory.fromAnyRef("project/src/test/resources/inputs/parquet1/date=2020-10-01/"))
但我得到了:
Error com.typesafe.config.ConfigException$BadPath: path parameter: Invalid path 'project.inputs.baseFile.': path has a leading, trailing, or two adjacent period '.' (use quoted "" empty string if you want an empty element)
设置新路径的正确方法是什么?
您有一个选择,就是覆盖整个数组:
import scala.collection.JavaConverters._
val mergedConfig = config.withValue("project.inputs.baseFile.paths",
ConfigValueFactory.fromAnyRef(Seq("project/src/test/resources/inputs/parquet1/date=2020-10-01/").asJava))
但更优雅的方法(恕我直言)是创建一个新的 config
,并使用现有的作为后备。
例如我们可以新建一个config
:
val newJsonString = """project {
|inputs {
|baseFile {
| paths = ["project/src/test/resources/inputs/parquet1/date=2020-10-01/"]
|}}}""".stripMargin
val newConfig = ConfigFactory.parseString(newJsonString)
现在合并它们:
val mergedConfig = newConfig.withFallback(config)
输出:
println(mergedConfig.getList("project.inputs.baseFile.paths"))
println(mergedConfig.getString("project.inputs.baseFile.type"))
是:
SimpleConfigList(["project/src/test/resources/inputs/parquet1/date=2020-10-01/"])
parquet
符合预期。
您可以阅读有关 Merging config trees. Code run at Scastie 的更多信息。
我没有找到用 withValue
替换数组中的一个元素的方法。