我是Springboot的新手。这是我试图解决的问题。 我有一个带有以下属性的application.yml文件:
kinesis:
streaming:
client:
featuretoggle:
kinesisSenderFeature: true
我尝试使用以下代码访问KinesisSenderFeature的值:
@Value("${kinesis.streaming.client.featuretoggle.kinesisSenderFeature}")
private boolean featureToggle;
以及
@Value("${kinesis.streaming.client.featuretoggle.kinesisSenderFeature}")
private Boolean featureToggle;
PropertySourcesPlaceholderConfigurer bean定义为:
@Bean
@Primary
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
yaml.setResources(new ClassPathResource("application.yml"));
propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject());
return propertySourcesPlaceholderConfigurer;
}
当我尝试构建时,ApplicaitonContext无法加载以下错误:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'rabbitMessageConsumer': Unsatisfied dependency expressed through field 'featureToggle'; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Boolean'; nested exception is java.lang.IllegalArgumentException: Invalid boolean value [${kinesis.streaming.client.featuretoggle.kinesisSenderFeature}]
我觉得奇怪的是,它试图将字符串: [$ {kinesis.streaming.client.featuretoggle.kinesisSenderFeature}] 转换为布尔值,我相信 - 不是在阅读yaml文件中属性的值。
是的,我确实看到了:
我不想在这个属性周围创建一个bean,因为这只是一个布尔标志。
注意:如果我在@Value中添加:default,则构建成功 - 但我相信这只是因为yaml的读取失败,并且默认使用我给出的值。
@Value("${kinesis.streaming.client.featuretoggle.kinesisSenderFeature:false}")
private boolean featureToggle;
注意:正如@Andreas在评论中指出的那样,我试着给予
//In application.yml
kinesisSenderFeature:false
//In code
@Value("${kinesisSenderFeature}")
private boolean featureToggle;
即使这样也行不通。但是从yaml读取的其他属性没有任何问题。它是src / main / resources中的标准application.yml,我认为应该默认读取它?
任何帮助将不胜感激。谢谢!
答案 0 :(得分:2)
正如@pvpkiran指出的那样,你不需要PropertySourcesPlaceholderConfigurer
。只需将application.yml
放在类路径上,Spring Boot就会选择它并分配Boolean
值。就像魅力一样,只是用Spring Boot 1.5.2测试它。