【问题标题】:How to read variable or concatenate one property in @Value annotation of spring boot如何在spring boot的@Value注释中读取变量或连接一个属性
【发布时间】:2019-04-24 02:11:41
【问题描述】:
我有一个 POJO 类,它在 Spring Boot 中从 application.yaml 文件中读取属性。这里我需要根据主题值和另一个字符串的组合将默认值设置为groupId(未给出时获取)。
private String topic;
@Value("${topic}_test")
private String groupId;
我试过这个,但得到错误
无法解析值“${topic}_test”中的占位符“主题”
我创建了一个变量并尝试在@Value 中访问它但失败了。
请提供任何建议以访问此
【问题讨论】:
标签:
spring-boot
annotations
【解决方案1】:
默认值
假设您的 application.yml 文件中有这样的属性
topic: myFavoriteTopic
如果 Spring 能够从 application.yml 加载带有键 topic 的属性,则下面的代码会将值“myFavoriteTopic”分配给变量 groupId。如果不是,它将分配默认值“我的默认主题”。
@Value("${topic:my default topic}")
private String groupId;
要将null 设置为默认值,请使用:
@Value("${topic:#{null}}")
要使用空字符串作为默认值,请使用:
@Value("${topic:}")
从变量中获取键名
在您的代码 sn-p 中,您有一个 String topic 变量。对于 Spring 框架,该变量在属性值检索中未使用。当您执行@Value("${topic}") 时,“topic”是 Spring 将在 application.yml 中查找的键的名称。无法在运行时根据 Java 变量的值确定键的名称。原因是可以在类代码执行之前加载属性。
_test 后缀
同样在您的代码 sn-p 中,您使用 @Value("${topic}_test")。在这种情况下,Spring 所做的是将“_test”连接到为属性键主题检索到的值。在我的第一个示例中,groupId 将被分配“myFavoriteTopic_test”。