【问题标题】:Multiple Datasources多个数据源
【发布时间】:2019-06-30 16:45:00
【问题描述】:

我已经按照 Oracle DB 的示例连接了两个数据源:

@配置 公共类 SpringConfigurationProperties 扩展 DataSourceProperties {

@Bean
@Primary
@ConfigurationProperties(prefix="spring.datasource")
public DataSource primaryDatasource() {
    return DataSourceBuilder.create().build();
}

@Bean
@Qualifier("primaryDatasource")
public NamedParameterJdbcTemplate primaryNpJdbcTemplate(DataSource dataSource) {
    return new NamedParameterJdbcTemplate(dataSource);
}

@Bean
@ConfigurationProperties(prefix="gps.bulk.load.database")
public DataSource bulkLoadDatasource() {
    return DataSourceBuilder.create().build();
}

@Bean
@Qualifier("bulkLoadDatasource")
public NamedParameterJdbcTemplate bulkLoadNpJdbcTemplate(DataSource dataSource) {
    return new NamedParameterJdbcTemplate(dataSource);
}

}

但我在启动时收到以下错误:

org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker 需要一个 bean,但找到了 2 个

【问题讨论】:

标签: java oracle spring-boot datasource


【解决方案1】:

我想我可以重现这个错误:

Parameter 1 of constructor in org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker required a single bean, but 2 were found: - myConfig: defined in file [...MyConfig.class] - spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties: defined in null

似乎 spring boot 为构造函数 DataSourceInitializerInvoker 找到了 2 个 DataSourceProperties,我不知道为什么,因为我只有一个类,但是当我将我的 Configuration 标记为 Primary 时,它可以工作。

@Configuration 
@Primary
public class SpringConfigurationProperties extends DataSourceProperties {
...

}

附加注释.properties:

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=test
spring.datasource.password=测试
spring.datasource.driver-class-name=test

gps.bulk.load.database.url=test
gps.bulk.load.database.username=test
gps.bulk.load.database.password=测试
gps.bulk.load.database.driver-class-name=test

【讨论】:

  • 我曾经尝试过,但是在进行了一些其他配置更改之后,是的,这确实让我克服了那个错误,但现在我得到了:Caused by: java.lang.IllegalArgumentException: dataSource or dataSourceClassName或 jdbcUrl 是必需的。我有我的属性,这是使用一个 DS,gps.prio.database.url=jdbc:oracle:thin:@...
  • 引起:org.springframework.beans.BeanInstantiationException:无法实例化[org.springframework.orm.jpa.JpaVendorAdapter]:工厂方法'jpaVendorAdapter'
  • 原因:java.lang.IllegalArgumentException:dataSource or dataSourceClassName or jdbcUrl is required
  • 但是gps.prio.database.url 不是您的数据源,它应该是gps.bulk.load.database.urlspring.datasource.url 还是? (我编辑我的答案)
  • 是的,抱歉,这是另一个仍在 prop 文件中的数据源,只是将错误的数据源复制到了这个线程。我解决了启动问题,但无论我做什么,辅助数据源总是选择 spring.datasource 并忽略 @ConfigurationProperties 的覆盖......
猜你喜欢
  • 2012-10-15
  • 1970-01-01
  • 2010-12-30
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多