私はSpringbootを初めて使用しています。これは私が解決しようとしている問題です。 私は次のプロパティを持つapplication.ymlファイルました:私は、コードを使用してKinesisSenderFeatureの値にアクセスしようとしたSpringboot yaml設定がブール値を読み取らない
kinesis:
streaming:
client:
featuretoggle:
kinesisSenderFeature: true
を:
@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ファイルからプロパティの値を読み取ることはできません。
はい、私は見ました:
- Mapping list in Yaml to list of objects in Spring Boot
- Spring boot YAML Config not reading all values
- Evaluating spring @value annotation as primitive boolean
これは単なるブールフラグであるように私は、このプロパティの周りに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です。私はこれがデフォルトで読み込まれるべきだと思いますか?
ご協力いただきますようお願い申し上げます。ありがとう!
*問題を調べるために、単純な 'abc:true'プロパティを定義して使ってみましたか?あなたが知っているのは、そのファイルからプロパティが読み込まれているかどうかです。 – Andreas
それを指摘していただきありがとうございます。いいえ、うまくいきませんでした。それに応じて質問を編集します。 – Jeevs
PropertySourcesPlaceholderConfigurer beanなしで試しましたか?私はこのBeanを削除して、SpringからのデフォルトのPropertyReaderが適切にそれをピックアップするかどうかを確認します。 – pvpkiran