使用spring可以很容易地使用env.getProperty(key)
读取正常属性
例如,如果您的应用程序。Yaml看起来像这样:
test: "a"
你可以像这样读取这个值:
val test = env.getProperty("test")
但是现在假设您想要阅读下面的application.yaml:
test:
-
a: "a"
-
b: "b"
如何动态读取test[a]
?不能工作的是:
val test = env.getProperty("test[a]")
给定的yaml结构将映射到对象列表。如果您想使用env
访问环境变量,则可以执行以下命令
val a = env["test[0].a"] // a
val b = env["test[1].b"] // b
注意列表中的对象必须通过index来访问。
或者,如果您使用spring,您可以定义一个ConfigurationProperties
类并将所有值映射到类变量
@ConfigurationProperties
class ConfigProperties (val test: List<Map<String, String>>)
可以在所需代码中注入该类,并通过遍历列表
来访问所需属性。@Component
class TempService(val configProperties: ConfigProperties){
fun temp(){
val a: String = configProperties.test.firstNotNullOf { it["a"] }
}
}
理想的解决方案是将yaml结构更改为正常的嵌套对象