Spring Batch с DB2 - PullRequest
       1

Spring Batch с DB2

0 голосов
/ 28 апреля 2020

Я запускаю прямое пакетное задание для чтения записи из базы данных DB2, я не получаю никакого результата или даже ошибки.

Любой взгляд, где я что-то упускаю ?

Вот код пакета.

    @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 publi c класс 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();
    }
}

} 

1 Ответ

0 голосов
/ 07 мая 2020

Поскольку у вас есть несколько источников данных, вам необходимо:

  • настроить репозиторий заданий для использования базы данных H2, предоставив пользовательский BatchConfigurer (как вы упомянули в описании)
  • настроить считыватель для чтения данных из DB2. Для JpaPagingItemReader необходимо настроить entityManagerFactory, чтобы он указывал на источник данных DB2.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...