使用@Value注解在Springboot中注入属性

Injecting property in Springboot using @Value annotation

我正在为一个应用程序使用 Spring 和 Java,我想使用 @Value 注释来注入 属性 的值,我的用例是我想首先检查 属性 是否作为系统 属性 存在(因此它优先),否则默认为配置 属性 (存在于属性文件中)

在注释代码中你可以看到我想要实现的目标,是否可以默认为简单字符串以外的其他内容?如果不是,我该如何实现?

//@Value("#{configProperties['local.datasource.username']}") THIS IS THE ORIGINAL CODE
//@Value("#{systemProperties['some.key'] ?: 'my default system property value'}") THIS IS HOW SPRING PROPOSE TO SET A DEFAULT VALUE
//@Value("#{systemProperties['some.key'] ?: #{configProperties['local.datasource.username']}}") THIS IS WHAT I WANT TO ACHIEVE, HOWEVER NOT COMPILING,
private String username;

您要找的很简单属性 占位符.

虽然 Spring Expression Language 支持相当复杂的表达式(三元、调用、表达式、数学)的 #{} 语法,但注入 属性 值和默认值在大多数情况下最好使用一个简单的 属性 占位符 ${value:defaultValue} 方法:

@Property("${some.key:local.datasource.username}")
private String username;

解析 some.key 的位置(与其来源无关),如果为 null,则 Spring 默认为 local.datasource.username 的值。

请记住,即使 some.key 存在,Spring 也会在无法解析您的默认值 属性 时抛出异常。

另请参阅: