Spring @Value带注释的方法,当属性不可用时使用默认值情况问题

情况

我正在将.properties文件中的属性注入到带有@Value注释的字段中。但是,此属性提供敏感凭据,因此我从存储库中删除它们。我仍然希望如果有人想要运行项目并且没有包含默认值将设置为字段的凭据的.properties文件。

问题

即使我将默认值设置为字段本身,当.properties文件不存在时,我也会得到异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xxx': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'secret' in string value "${secret}"

下面是带注释的字段:

 @Value("${secret}")
 private String ldapSecret = "secret";

我预计在这种情况下,只会设置普通的字符串“秘密”。


答案 1

要准确回答您的问题...

@Value("${secret:secret}")
private String ldapSecret;

为了完整起见,下面还有一些变体...

将字符串默认为空:

@Value("${secret:#{null}}")
private String secret;

默认一个数字:

@Value("${someNumber:0}")
private int someNumber;

答案 2

只需使用:

@Value("${secret:default-secret-value}")
private String ldapSecret;

推荐