2017-08-25 13 views
1

初期化中にBeanが完全に構成されていない場合、Spring Bootが例外をスローするようにします。正しい方法は、関連性のあるBeanメソッドに@Requiredという注釈を付けることだと思っていましたが、期待通りに動作しません。@Requiredは、Beanが初期化されても例外を発生させます。

application.yml:

my_field: 100 

単純なBeanクラス:

package com.example.demo; 

import org.springframework.beans.factory.annotation.Required; 
import org.springframework.stereotype.Component; 

@Component 
public class MyProperties { 
    private int myField; 

    public MyProperties(){} 

    @Required 
    public void setMyField(int myField) { 
     this.myField = myField; 
    } 

    @Override 
    public String toString() { 
     return "{myField=" + myField + '}'; 
    } 
} 

マイアプリケーションクラス:DemoApplicationのinitメソッドで

package com.example.demo; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.boot.context.properties.ConfigurationProperties; 
import org.springframework.context.annotation.Bean; 

import javax.annotation.PostConstruct; 

@SpringBootApplication 
public class DemoApplication { 

    @Bean 
    @ConfigurationProperties 
    public MyProperties getMyProperties() { 
     return new MyProperties(); 
    } 

    @PostConstruct 
    public void init() { 
     MyProperties myProperties = getMyProperties(); 
     System.out.println(myProperties); 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(DemoApplication.class, args); 
    } 
} 

私は結果のBeanオブジェクトを印刷しています。 @Required注釈がないと、正しく読み込まれ、{myField=100}が印刷されます。しかし、注釈を追加すると、この例外がスローされます。

org.springframework.beans.factory.BeanInitializationException: Property 'myField' is required for bean 'myProperties' 

これは、設定ファイルに必要な値が含まれているにもかかわらずです。

Springにフィールドが必要であることを伝えるのは正しいですか?

答えて

0

docs

から春ブーツは、彼らは春の@Validatedアノテーションを付けているときは常に@ConfigurationPropertiesクラスを検証しようとします。 JSR-303 javax.validation制約注釈は、構成クラスで直接使用できます。

@NonNull 
private int myField; 
を次のように単純に準拠したJSR-303の実装がクラスパス上にあることを確認し、その後、自分のフィールドに

を制約注釈を追加あなたはmyFieldを宣言する必要があります

関連する問題