Spring Boot-以编程方式加载属性文件,包括YAML

时间:2018-12-05 18:38:50

标签: spring spring-boot kotlin yaml

我正在尝试以编程方式读取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像通常那样自动处理它。

0 个答案:

没有答案