Я использую базу данных h2 с весенней загрузкой. Базовая конфигурация
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=create
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
Все идет гладко.
Теперь я хочу определить другой компонент источника данных в моем приложении
@Bean
@Qualifier("oracleDatasource")
public DataSource oracleDataSource(@Qualifier("oracleDBProperties") DataSourceProperties oracleDBProperties) {
return oracleDBProperties.initializeDataSourceBuilder().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.oracle.datasource")
public DataSourceProperties oracleDBProperties() {
return new DataSourceProperties();
}
spring.oracle.datasource.url=jdbc:oracle:thin:url:db
spring.oracle.datasource.username=test
spring.oracle.datasource.password=test
spring.oracle.datasource.driver-class-name=oracle.jdbc.OracleDriver
Источник данных oracle успешно инициализируется, но на этот раз конфигурация h2 игнорируется. Похоже, что определение другого компонента DataSource подавляет автоконфигурацию пружины для h2.
Как я могу избежать этого подавления или есть способ определить h2 так же, как я сделал для оракула?
Я попытался выполнить тот же тип конфигурации bean-компонентов для h2, что и для оракула, но, похоже, он не работает.
UPDATE
Исправлена проблема со следующим
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.h2.datasource")
public DataSourceProperties h2DBProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
@Qualifier("h2Datasource")
public DataSource h2DataSource(@Qualifier("h2DBProperties") DataSourceProperties h2DBProperties) {
return h2DBProperties.initializeDataSourceBuilder().build();
}
spring.h2.datasource.url=jdbc:h2:mem:testdb
spring.h2.datasource.driverClassName=org.h2.Driver
spring.h2.datasource.username=sa
spring.h2.datasource.password=
Добавление аннотации @Primary не позволяло ничему ее подавлять. Хотя все еще не уверен, что это правильное решение.