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

时间:2018-11-21 13:34:20

标签: spring-boot annotations

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

private String topic;

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

我尝试了此操作,但出现错误

  

无法解析值“ $ {topic} _test

”中的占位符“ topic”

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

1 个答案:

答案 0 :(得分:2)

默认值

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

topic: myFavoriteTopic

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

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

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

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

要将空字符串用作默认值,请使用:

@Value("${topic:}")

从变量获取键名

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

_test后缀

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