Я пытаюсь прочитать данные из oracle БД и записать данные в postgresql БД.
При приведенной ниже конфигурации только 250 записей читаются и записываются в БД, в то время как в источнике содержится более 100 000 записей. DB. Что я делаю не так?
Я использую Spring Boot-2.2.5 и Spring Batch.
Еще одна вещь, которую я заметил, это то, что
if chunk/page size = 500 , 250 records are read
if chunk/page size = 1000 , 500 records are read
if chunk/page size = 2500 , 1250 records are read
Конфигурация как показано ниже:
@Bean
Job job() throws Exception {
return jobBuilderFactory.get("importJob")
.incrementer(new RunIdIncrementer())
.flow(importPersonDetails())
.end()
.build();
}
Step importPersonDetails() throws Exception {
return this.stepBuilderFactory.get("importPersonDetails")
.<Person, Person>chunk(500)
.reader(personPagingItemReader())
.writer(personWriter())
.listener(new StepListener())
.build();
}
JdbcPagingItemReader<Person> personPagingItemReader() throws Exception {
OraclePagingQueryProvider oraclePagingQueryProvider = new OraclePagingQueryProvider();
oraclePagingQueryProvider.setSelectClause("id,first_name,last_name,birth_date");
oraclePagingQueryProvider.setFromClause("person_details");
oraclePagingQueryProvider.setWhereClause("is_alive='Y'");
Map<String, Order> sortKeys = new HashMap<>(1);
sortKeys.put("id",Order.ASCENDING);
oraclePagingQueryProvider.setSortKeys(sortKeys);
JdbcPagingItemReader<Person> personJdbcPagingItemReader = new JdbcPagingItemReader<>();
personJdbcPagingItemReader.setDataSource(sourceDatasource);
personJdbcPagingItemReader.setPageSize(500);
personJdbcPagingItemReader.setQueryProvider(oraclePagingQueryProvider);
personJdbcPagingItemReader.setRowMapper(new PersonRowMapper());
personJdbcPagingItemReader.afterPropertiesSet();
return personJdbcPagingItemReader;
}
JdbcBatchItemWriter<Person> personWriter() {
JdbcBatchItemWriter<Person> personJdbcBatchItemWriter = new JdbcBatchItemWriter<>();
personJdbcBatchItemWriter.setDataSource(targetDatasource);
personJdbcBatchItemWriter.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<Person>());
personJdbcBatchItemWriter.setSql(QUERY_INSERT_PERSONS);
personJdbcBatchItemWriter.afterPropertiesSet();
return personJdbcBatchItemWriter;
}