如何在Spring引导的@Value注释中读取变量或连接一个属性

问题描述 投票:2回答:1

我有一个POJO类,它在spring boot中读取application.yaml文件中的属性。在这里,我需要根据主题值和另一个字符串的组合将默认值设置为groupId(在未给定时获取)。

private String topic;

 @Value("${topic}_test")
 private String groupId;

我尝试了这个但是得到了错误

无法解决值“$ {topic} _test”中的占位符“主题”

我创建了一个变量并尝试在@Value中访问它但失败了。请提供任何建议来访问此内容

spring-boot annotations
1个回答
2
投票

Default value

假设您在application.yml文件中有这样的属性

topic: myFavoriteTopic

如果Spring能够使用application.yml中的密钥groupId加载属性,则下面的代码会将值“myFavoriteTopic”赋值给变量topic。如果不是,它将分配默认值“我的默认主题”。

@Value("${topic:my default topic}")
private String groupId;

要将null设置为默认值,请使用:

@Value("${topic:#{null}}")

要使用空String作为默认值,请使用:

@Value("${topic:}")

Get key name from a variable

在您的代码段中,您有一个String topic变量。对于Spring框架,此变量不用于属性值检索。当你执行@Value("${topic}")时,“topic”是Spring在application.yml中寻找的键的名称。无法在运行时根据Java变量的值确定密钥的名称。原因是可以在类代码执行之前加载属性。

_test suffix

同样在您的代码段中,您使用@Value("${topic}_test")。 Spring在这种情况下的作用是将“_test”连接到为属性键主题检索的值。在我的第一个例子中,groupId将被分配“myFavoriteTopic_test”。

© www.soinside.com 2019 - 2024. All rights reserved.