【问题标题】:Getting null values when using ConfigurationProperties on Spring boot在 Spring Boot 上使用 ConfigurationProperties 时获取空值
【发布时间】:2017-11-06 04:49:08
【问题描述】:

我是 Java 世界和 Spring boot 的新手,我正在尝试通过 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.

【问题讨论】:

标签: java spring


【解决方案1】:

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

在 ValidationProperties 上添加 @Component 注释也应该可以工作。

无需通过@Value注解注入值,只需通过注入的validationProperties对象的getter访问即可

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-05-06
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 2022-07-09
      • 2015-06-17
      • 2018-02-07
      • 2016-07-24
      • 1970-01-01
      相关资源
      最近更新 更多