动态的Spring读列表属性



使用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结构更改为正常的嵌套对象

最新更新