【发布时间】:2019-11-12 00:43:45
【问题描述】:
我正在使用 spring boot 运行 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
一切顺利。
现在我想在我的应用程序中定义另一个 Datasource bean
@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 bean 会抑制 spring 对 h2 的自动配置。
我怎样才能避免这种抑制,或者有没有办法像我为 oracle 所做的那样定义 h2?
我尝试为 h2 做与我为 oracle 所做的相同类型的 bean 配置,但它似乎不起作用。
更新
修复了以下问题
@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 注释并没有让任何东西抑制它。虽然,仍然不确定是否将其视为正确的解决方案。
【问题讨论】:
标签: java hibernate spring-boot datasource h2