Как говорится в названии, я пытаюсь использовать Typesafe Configuration Properties для загрузки списка объектов DataSourceConfig
. У меня есть Ломбки для инкубационных/добытчиковSpring boot @ConfigurationProperties не загружен
Основного применения
@Slf4j
@SpringBootApplication
@EnableConfigurationProperties
public class Application {
Конфигурации POJO
@Data
public class DataSourceConfig {
private String key;
private String dbname;
private String dbpath;
}
YML файл
tenantdb:
dataSourceConfig:
-
key: default
dbpath: file:eventstore/jdbc/database
dbname: defaultdb
-
key: other
dbpath: file:eventstore/jdbc/other
dbname: dslfjsdf
Наконец, класс Spring Конфигурации с аннотация @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;
}
С конфигой выше, я получаю:
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
Я пробовал различные комбинации. Если я изменю аннотацию на @ConfigurationProperties(prefix="tenantdb.dataSourceConfig")
, я не получу ошибку, но List<DataSourceConfig>
пуст.
HELP !!
Мои свойства конфигурации аннотируются '@ Component' и заполняется в то время как компонент сканирования, которые вы это пробовали? Также есть еще две вещи, где находится 'datasources.yml' и почему« getDataSourceConfig »аннотируется как bean? –
'datasources.yml' находится в корне. 'getDataSourceConfig' аннотируется как bean-компонент, так что я могу его внедрить и в другом месте. – Raghu
Я попытался поиграть с вашим кодом, создал тест и получил список 2 'DataSourceConfig', как и ожидалось. Единственное, что они пустые (имеют «null» для 'key',' dbname' и 'dbpath'. Я предоставил сеттеры для этого класса, и он был привязан в порядке, может быть так? –