弹簧启动:将默认值设置为可配置属性

我在我的spring-boot项目中有一个属性类。

@Component
@ConfigurationProperties(prefix = "myprefix")
public class MyProperties {
    private String property1;
    private String property2;

    // getter/setter
}

现在,我想将默认值设置为 application.properties 文件中的其他一些属性。类似于下面的示例使用@Valueproperty1

@Value("${myprefix.property1:${somepropety}}")
private String property1;

我知道我们可以分配静态值,就像下面的例子一样,其中“默认值”被分配为,property

@Component
@ConfigurationProperties(prefix = "myprefix")
public class MyProperties {
    private String property1 = "default value"; // if it's static value
    private String property2;

    // getter/setter
}

如何在弹簧引导中使用@ConfigurationProperties类(而不是类型安全的配置属性)来执行此操作,其中我的默认值是另一个属性?


答案 1

检查属性 1 是否使用 MyProperties 类中的@PostContruct进行设置。如果不是,则可以将其分配给其他属性。

@PostConstruct
    public void init() {
        if(property1==null) {
            property1 = //whatever you want
        }
    }

答案 2

在spring-boot 1.5.10(可能更早)中,设置默认值按照您建议的方式工作。例:

@Component
@ConfigurationProperties(prefix = "myprefix")
public class MyProperties {

  @Value("${spring.application.name}")
  protected String appName;
}

仅当在您自己的属性文件中未被覆盖时,才会使用默认值。@Value