2017-05-08 17 views
1

別のプロパティの値に基づいてspringプロパティの検証を使用することはできますか?Spring条件付きプロパティの検証

@ConditionalOnPropertyは、多くの場所で使用されているため使用できません。私は各Beanに対して@ConditionalOnPropertyを置くことはできません。ここで

は私が持っているものである。この場合thisShouldBeValidatedの検証はproperty2Enabledの値がtrueの場合にのみ

@ConfigurationProperties 
public class Property1 { 
    boolean property2Enabled 
} 

@ConfigurationProperties 
public class Property2 { 
    @NotNull 
    @Size(min = 1) 
    String thisShouldBeValidated; 

} 

を適用する必要があります。

いくつかの春の注釈でこれを行うことはできますか? 私はカスタムの検証を書いても、何とかしてproperty2Enabledの値を取得できますか?

答えて

1

@Beanメソッドに適用できるSpring 4 @Conditionalアノテーションを試してみてください。

import org.springframework.context.annotation.Condition; 
@ConfigurationProperties 
public class Property1 implements Condition{ 

@Override 
public boolean matches() 
boolean property2Enabled; 
return property2Enabled; 
} 
} 

thisShouldBeValidatedはproperty2Enabledの値がtrueの場合にのみ適用されるべきです。それ以外の場合は無視されます。あなたが見ることができるように

import org.springframework.context.annotation.Condition; 
    public class Property2 { 
    @NotNull 
    @Size(min = 1) 

    @Bean 
    @Conditional(Property1.class) 
    void Property2 yourMethod() { 
    system.out.println("whatever"+ thisShouldBeValidated); 
    }   
    } 

@Conditionalが条件で、この場合、Property1を指定するクラスを与えています。 @Conditionalに与えられるクラスは、の条件 インターフェイスを実装する任意のタイプであることができます。

+0

この解決策は、私が使用できない@ConditionalOnPropertyに似ています。 void Property2 yourMethod()は常にProperty2を返しますが、property2Enabled = falseの場合は検証なしのソリューションが必要です – bazsoja