Spring Batch:在内存数据库中用于Spring Batch元数据表

时间:2019-11-18 09:59:07

标签: spring spring-batch datasource

我正在使用spring batch从Oracle数据库读取数据并将结果写入CSV文件。

我还需要从oracle数据库中分离spring批处理元数据表,为此,我在我的批处理配置中配置了两个不同的数据源(一个用于spring批处理元数据的内存数据库)。

这是我的代码:

BatchConfiguration.java

@Configuration
@EnableBatchProcessing
@EnableScheduling
public class BatchConfiguration {

  @Autowired
  public JobBuilderFactory jobBuilderFactory;

  @Autowired
  public StepBuilderFactory stepBuilderFactory;    


  @Bean
  @Qualifier("businessDataSource")
  @ConfigurationProperties(prefix = "spring.business.datasource")
  public DataSource primaryDataSource() {
    return DataSourceBuilder.create().build();
  }

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

然后我的itemReader bean看起来像:

@Bean
public ItemReader<Person> reader(@Qualifier("businessDataSource") DataSource dataSource) {
  .....
}

运行批处理时,一切正常。

但是当我尝试在我的 BatchApplication.java 中添加JobLauncher和Job Bean时:

@Autowired
private JobLauncher jobLauncher;

@Autowired
private Job job;

该批次正在尝试将元数据数据库用于我的业务数据库:

  

原因:org.springframework.jdbc.BadSqlGrammarException:执行查询;错误的SQL语法

我的代码中有问题吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

最后我得到了解决方案

我的阅读器bean是:

@Bean
public ItemReader<Person> reader(@Qualifier("businessDataSource") DataSource dataSource) {
  databaseReader.setDataSource(datasource);
   ....
}

我通过(现在可以了)更改它

@Bean
  public ItemReader<Person> reader() {
    JdbcCursorItemReader<Person> databaseReader = new JdbcCursorItemReader<>();
    databaseReader.setDataSource(primaryDataSource());
    ....
  }