Spring Boot(批处理) - 注入数据源

时间:2017-08-18 19:41:42

标签: spring-boot spring-batch

我有一个Spring Boot(面向批处理)应用程序,它使用数据源来完成批处理作业并将数据写入数据库。

我在application.yml内定义了数据源,如:

spring:
  datasource:
    url: jdbc:h2:mem:JavaSpringBootBatch
    username: sa
    password:
  profiles: # default, development, production
    active: default, development
---
spring:
  h2:
    # ...config/settings here
  profiles: development
---
spring:
  datasource:
    # ...datasource config here
  profiles: production

问题是当我尝试将数据源注入其中一个Spring配置文件时:

@Configuration
public class PlayerBatchConfig {
  ...

  @Bean
  public ItemWriter<Player> writer(final DataSource dataSource) {
    final JdbcBatchItemWriter<Player> jdbcItemWriter = new JdbcBatchItemWriter<>();
    ...
    jdbcItemWriter.setDataSource(dataSource);
    jdbcItemWriter.setSql(sql.toString());
    return jdbcItemWriter;
  }
}

......它告诉我:

  

无法自动装配。有多个'DataSource'类型的bean。

     

豆类:   数据源(DataSourceConfiguration.class)   数据源(EmbeddedDataSourceConfiguration.class)

我还尝试注入数据源,如:

@Configuration
public class PlayerBatchConfig {
  @Bean
  @ConfigurationProperties(prefix = "datasource")
  public DataSource dataSource() {
    return DataSourceBuilder.create().build();
  }

  ...
}

...但没有运气:(尽管两个数据源的问题最终消失了。

任何线索如何“规避”那个?

2 个答案:

答案 0 :(得分:0)

由于您有2个数据源,因此需要使用@Qualifier对数据源bean进行注释,以及何时使用它们。 Spring告诉你它不知道你想使用哪一个。

答案 1 :(得分:0)

DataSource使用annotate的{​​{1}},请参阅spring-boot文档here以获取更多信息。与@Primary一起,您可能还需要使用@Primary来控制bean注入。