Wie der Titel sagt, versuche ich Typesafe Configuration Properties zu verwenden, um eine Liste von DataSourceConfig
Objekte zu laden. Ich habe lombok für Setter/GetterSpring boot @ConfigurationProperties nicht geladen
Die Hauptanwendungsklasse Anmerkungen
@Slf4j
@SpringBootApplication
@EnableConfigurationProperties
public class Application {
Die Konfiguration pojo
@Data
public class DataSourceConfig {
private String key;
private String dbname;
private String dbpath;
}
Die yml Datei
tenantdb:
dataSourceConfig:
-
key: default
dbpath: file:eventstore/jdbc/database
dbname: defaultdb
-
key: other
dbpath: file:eventstore/jdbc/other
dbname: dslfjsdf
Schließlich ist die Federkonfiguration Klasse mit die Annotation @ConfigurationProperties.
@Configuration
@Profile("hsqldb")
@ImportResource(value = { "persistence-config.xml" })
@Slf4j
@ConfigurationProperties(prefix="tenantdb", locations={"datasources.yml"})
public class HsqlConfiguration {
private List<DataSourceConfig> dataSourceConfig = new ArrayList<>();
@Bean
public List<DataSourceConfig> getDataSourceConfig() {
return dataSourceConfig;
}
Mit der Config oben, erhalte ich:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hsqlConfiguration': Could not bind properties to [unknown] (target=tenantdb, ignoreInvalidFields=false, ignoreUnknownFields=true, ignoreNestedProperties=false); nested exception is java.lang.NullPointerException
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:303)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initia
ich verschiedene Kombinationen ausprobiert habe. Wenn ich die Annotation zu @ConfigurationProperties(prefix="tenantdb.dataSourceConfig")
ändere, erhalte ich den Fehler nicht, aber List<DataSourceConfig>
ist leer.
HILFE !!
Meine Konfigurationseigenschaften kommentierten sind mit '@ Component' und es wird während Komponente Scannen gefüllt haben hast du das probiert? Und noch zwei Dinge, wo 'datasources.yml' sich befindet und warum' getDataSourceConfig' als Bean notiert ist? –
'datasources.yml' befindet sich im Klassenpfadstamm. 'getDataSourceConfig' ist als Bean annotiert, so dass ich es auch anderswo einfügen kann. – Raghu
Ich habe versucht, mit Ihrem Code zu spielen, erstellt Test und ich bekomme eine Liste von 2 'DataSourceConfig' wie erwartet. Die einzige Sache ist, dass sie leer sind (habe 'null' für' key', 'dbname' und' dbpath'. Ich habe Setter für diese Klasse zur Verfügung gestellt und es ist in Ordnung, könnte das sein? –