我是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.
答案 0 :(得分:2)
尝试添加@EnableConfigurationProperties(ValidationProperties.class)
在您的主要应用程序类或任何其他@Configuration
类上。
还将@Component
注释放在ValidationProperties上也可以使用。
无需通过@Value
注释注入值,只需通过注入的validationProperties
对象的吸气剂对其进行访问
答案 1 :(得分:0)
我在 SpringBoot 应用程序上运行 JUnit 测试时遇到此错误,我缺少的是注释 @SpringBootTest