我正在尝试以编程方式读取Spring样式的属性文件,包括YAML格式的文件。
我所拥有的有些工作,但是最终使YAML变平了,所以我最终得到了混杂在一起的键,当我尝试将其映射到特定对象时,会感到困惑。
这是我所拥有的(在Kotlin中):
import my.project.Properties
import java.util.Properties as JavaProperties
fun loadConfig(configFiles: List<String>): Properties =
JavaProperties().apply {
putAll(appProperties.defaultConfig)
(if (configFiles.isEmpty()) appProperties.defaultConfigFiles else configFiles)
.forEach { PropertiesLoaderUtils.fillProperties(this, FileSystemResource(it)) }
}.let {
// throws exception because it was flattened
objectMapper.convertValue(it, Properties::class.java)
}
如果我有这样的配置文件:
a:
b:
c: 1
我希望它最终在Java属性中具有与之等效的内容:
mapOf("a" to mapOf("b" to mapOf("c" to 1)))
相反,我得到的是这样的东西:
mapOf("c" to 1)
它完全弄平了它并完全丢弃了层次结构。
我宁愿不只是使用YAML解析器自己做,因为我也希望允许“常规” Spring样式属性文件。
注意:这些必须在运行时加载,因为该应用程序实际上是针对其他应用程序运行的,所以我不能只让Spring像通常那样自动处理它。