2017-08-25 114 views
1

如果在初始化过程中没有完全配置我的Bean,我希望Spring Boot引发异常。我认为这样做的正确方法是用@Required注释相关Bean方法,但它不像我预期的那样工作。@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 + '}'; 
    } 
} 

我的应用程序类:

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); 
    } 
} 

在DemoApplication的init方法,我打印生成的bean对象。如果没有@Required注释,它会正确加载并打印{myField=100}。但是,当我添加注释时,它会引发此异常:

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

尽管配置文件包含所需值,

什么是正确的告诉春,一个字段是必需的?

回答

0

docs

春天开机时会尝试验证@ConfigurationProperties班时,他们与Spring的@Validated注解。您可以直接在配置类上使用JSR-303 javax.validation约束注释。只要确保符合JSR-303实现你的类路径,然后添加约束注释到你的领域

你应该申报myField如下:

@NonNull 
private int myField; 
相关问题