在Spring启动时使用ConfigurationProperties时获取空值

时间:2017-06-05 12:01:07

标签: java spring

我是Java世界和Spring启动的新手,我正试图通过ConfigurationProperties注释访问位于YAML文件中的一些配置值。

但是每当我尝试在服务中的任何地方访问配置值时,我都会得到一个空值。

这是application.yml文件:

my_config:
  test: "plop"

这是ValidationProperties配置类:

@Configuration
@ConfigurationProperties(prefix = "my_config")
public class ValidationProperties {

    @NotNull
    private String test;

    public void setTest(String test) {
        this.test = test;
    }

    public String getTest() {
        return this.test;
    }
}

使用它的验证器服务:

@Service
public class MyValidator implements ConstraintValidator<MyConstraint, MyEntity> {

    @Autowired
    private ValidationProperties validationProperties;

    @Value("${my_config.test}")
    private String test;

    @Override
    public boolean isValid(MyEntity entity, ConstraintValidatorContext context) {

        System.out.println(this.test); // null value, why?
    }
}

我还在主班中添加了@EnableConfigurationProperties注释。

我不确定哪个注释应该做什么,但我显然在这里遗漏了一些东西。此外,如果我尝试从配置文件的getter访问该值,我会得到一个例外:

System.out.println(this.validationProperties.getTest());

会给我HV000028: Unexpected exception during isValid call.

2 个答案:

答案 0 :(得分:2)

尝试添加@EnableConfigurationProperties(ValidationProperties.class) 在您的主要应用程序类或任何其他@Configuration类上。

还将@Component注释放在ValidationProperties上也可以使用。

无需通过@Value注释注入值,只需通过注入的validationProperties对象的吸气剂对其进行访问

答案 1 :(得分:0)

我在 SpringBoot 应用程序上运行 JUnit 测试时遇到此错误,我缺少的是注释 @SpringBootTest