【问题标题】: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”。

【讨论】:

    猜你喜欢
    • 2017-07-09
    • 2022-11-03
    • 2022-06-22
    • 2018-06-26
    • 2021-12-07
    • 1970-01-01
    • 2021-11-24
    • 2016-12-27
    • 1970-01-01
    相关资源
    最近更新 更多