【问题标题】:@Required causes exceptions even when bean is initialized@Required 即使在初始化 bean 时也会导致异常
【发布时间】:2017-08-25 09:47:30
【问题描述】:

如果我的任何 bean 在初始化期间未完全配置,我希望 Spring Boot 引发异常。我认为这样做的正确方法是用@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'

尽管配置文件包含所需的值。

告诉 Spring 需要一个字段的正确方法是什么?

【问题讨论】:

    标签: java spring spring-boot javabeans


    【解决方案1】:

    来自docs

    每当使用 Spring 的 @Validated 注解进行注解时,Spring Boot 都会尝试验证 @ConfigurationProperties 类。您可以直接在配置类上使用 JSR-303 javax.validation 约束注释。只需确保在您的类路径中存在兼容的 JSR-303 实现,然后将约束注释添加到您的字段

    您应该如下声明myField

    @NonNull
    private int myField;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多