有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

处境

我正在从注入属性。属性将文件放入带有@Value注释的字段中。但是,这些属性表示敏感凭据,所以我将它们从存储库中删除。我仍然希望这样,以防有人想要运行项目,但却没有。属性文件,其凭据的默认值将设置为字段

问题

即使我将默认值设置为字段本身,我也会遇到异常。属性文件不存在:

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";

我希望在这种情况下只设置普通字符串“secret”


共 (4) 个答案

  1. # 1 楼答案

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

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

    准确回答你的问题

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

    下面还有一些变化,以确保示例的完整性

    默认字符串为空:

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

    默认数字:

    @Value("${someNumber:0}")
    private int someNumber;
    
  3. # 3 楼答案

    只需使用:

    @Value("${secret:default-secret-value}")
    private String ldapSecret;
    
  4. # 4 楼答案

    @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;