我是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;
    }
}

使用它的 validator 服务:
@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.

最佳答案

尝试添加@EnableConfigurationProperties(ValidationProperties.class)在您的主应用程序类或任何其他@Configuration类上。
@Component注释也放在ValidationProperties上也应该起作用。
无需通过@Value批注注入(inject)值,只需通过注入(inject)的validationProperties对象的getter对其进行访问

10-08 12:59