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

时间:2017-04-05 18:07:32

标签: java spring spring-boot spring-annotations properties-file

情况

我正在将 .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";

我希望在这种情况下只是简单的字符串"秘密"会被设定。

4 个答案:

答案 0 :(得分:7)

准确回答你的问题......

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

以下是一些示例完整性的变化......

将字符串默认为null:

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

默认数字:

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

答案 1 :(得分:4)

只需使用:

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

答案 2 :(得分:0)

@Value and Property Examples
To set a default value for property placeholder :

${property:default value}
Few examples :

//@PropertySource("classpath:/config.properties}")
//@Configuration

@Value("${mongodb.url:127.0.0.1}")
private String mongodbUrl;

@Value("#{'${mongodb.url:172.0.0.1}'}")
private String mongodbUrl;

@Value("#{config['mongodb.url']?:'127.0.0.1'}")
private String mongodbUrl;

答案 3 :(得分:-2)

实际上,将始终使用默认值。为了克服这个问题,我使用了一个字符串值

@Value("${prop}")
String propValue;//if no prop defined, the propValue is set to the literal "${prop}"
....
if("${prop}".equals(propValue)) {
     propValue=defaultValue
}