Ich bin neu bei Springboot. Das ist das Problem, das ich versuche zu lösen. Ich habe eine application.yml Datei mit folgenden Eigenschaft:Springboot yaml config nicht lesen boolean
kinesis:
streaming:
client:
featuretoggle:
kinesisSenderFeature: true
Ich habe versucht, den Wert des KinesisSenderFeature mit dem Code zuzugreifen:
@Value("${kinesis.streaming.client.featuretoggle.kinesisSenderFeature}")
private boolean featureToggle;
sowie
@Value("${kinesis.streaming.client.featuretoggle.kinesisSenderFeature}")
private Boolean featureToggle;
Die PropertySourcesPlaceholderConfigurator-Bean ist definiert als:
@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;
}
Wenn ich zu bauen versuchen, nicht ApplicaitonContext mit dem folgenden Fehler laden:
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}]
Was finde ich seltsam, es versucht, die Zeichenfolge zu konvertieren: [$ {kinesis.streaming.client.featuretoggle .kinesisSenderFeature}] in einen booleschen Wert, und ich glaube - liest nicht den Wert der Eigenschaft aus der Yaml-Datei.
Ja, ich habe:
- 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
Ich will nicht eine Bohne, um dieses Objekt zu schaffen, wie dies nur ein boolean-Flag .
Hinweis: Wenn ich ein: default in den @ Value, der Build erfolgreich- aber ich glaube, das ist nur, weil das Lesen von Yaml fehlgeschlagen, und standardmäßig mit dem Wert, den ich gab.
@Value("${kinesis.streaming.client.featuretoggle.kinesisSenderFeature:false}")
private boolean featureToggle;
Hinweis: Wie @Andreas im Kommentar erwähnt, habe ich versucht, auch
//In application.yml
kinesisSenderFeature:false
//In code
@Value("${kinesisSenderFeature}")
private boolean featureToggle;
geben, die nicht funktioniert hat. Aber es gibt andere Eigenschaften, die ohne Probleme vom Yaml gelesen werden. Es ist die Standard-application.yml in src/main/resources, von der ich glaube, dass sie standardmäßig gelesen werden sollte.
Jede Hilfe wird sehr geschätzt. Vielen Dank!
Um * das Problem * zu erforschen, haben Sie versucht, eine einfache 'abc: true'-Eigenschaft zu definieren und diese zu verwenden? Sie wissen, ob eine Eigenschaft aus dieser Datei gelesen wird. – Andreas
Vielen Dank, dass Sie darauf hingewiesen haben. Nein, auch das hat nicht funktioniert. Ich werde die Frage entsprechend bearbeiten. – Jeevs
Haben Sie versucht, ohne PropertySourcesPlaceholderConfigurer Bean. Ich meine, entfernen Sie diese Bohne und sehen Sie, ob der Standard PropertyReader von Spring es richtig aufnimmt – pvpkiran