Spring 使用 DB2 进行批处理

Spring Batch with DB2

我正在 运行 进行直接的批处理作业以从 DB2 DB 读取记录,我在输出中没有得到任何结果,甚至没有得到错误。

看一眼我遗漏了什么吗?

这是批处理的代码。

    @Configuration
    @EnableBatchProcessing
    @AllArgsConstructor
    public class ETLConfig {

        private JobBuilderFactory jobBuilderFactory;
        private StepBuilderFactory stepBuilderFactory;
        private EntityManagerFactory emf;

        @Bean
        public Step sampleStep(){

            return stepBuilderFactory.get("sampleStep")
                    .<String, String>chunk(5)
                    .reader(itemReader())
                    .writer(i -> i.stream().forEach(j -> System.out.println(j)))
                    .build();
        }

        @Bean
        public Job sampleJob(){
            return jobBuilderFactory.get("sampleJob")
                    .incrementer(new RunIdIncrementer())
                    .start(sampleStep())
                    .build();
        }


        @Bean
        public JpaPagingItemReader itemReader(/*@Value("${query}") String query*/){
            return new JpaPagingItemReaderBuilder<>()
                    .name("db2Reader")
                    .entityManagerFactory(emf)
                    .queryString("select * FROM EXPORT.FCR_HDR F WHERE F.FCR_REF = 'R2G0128330'")
                    .pageSize(3)
                    .build();
        }

    }

如果我 运行 在数据库上进行相同的查询,我将得到此参考的输出。

@组件 @AllArgsConstructor public class NoPersistenceBatchConfigurer 扩展了 DefaultBatchConfigurer {

@Bean
public DataSource batchDataSource() throws ClassNotFoundException {

    return DataSourceBuilder.create()
            .driverClassName("org.h2.Driver")
            .url("jdbc:h2:mem:testdb")
            .username("sa")
            .password("")
            .build();
}

@Override
public void setDataSource(DataSource batchDataSource) {
    try {
        super.setDataSource(batchDataSource());
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

} 

由于您有多个数据源,您需要:

  • 通过提供自定义 BatchConfigurer(正如您在描述中提到的那样)将作业存储库配置为使用 H2 数据库
  • 配置 reader 从 DB2 读取数据。对于 JpaPagingItemReader,您需要配置 entityManagerFactory 以指向 DB2 数据源。