web-dev-qa-db-ja.com

Spring-boot:デフォルト値を構成可能なプロパティに設定

Spring-Bootプロジェクトに以下のプロパティクラスがあります。

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

    // getter/setter
}

ここで、property1のapplication.propertiesファイルで、デフォルト値を他のプロパティに設定したいと思います。以下の例と同様に@Valueを使用します

@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クラス(むしろタイプセーフな構成プロパティ)を使用してこれを行う方法は?

20
Ashvin Kanani

MyPropertiesクラスの@PostContructを使用してproperty1が設定されているかどうかを確認します。そうでない場合は、別のプロパティに割り当てることができます。

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

Spring-Boot 1.5.10(およびおそらくそれ以前)では、デフォルト値の設定は提案された方法で機能します。例:

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

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

@Value defaultは、独自のプロパティファイルでオーバーライドされていない場合にのみ使用されます。

5
Andy Brown