我是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对其进行访问