DEV Community

Edgar Rios Navarro
Edgar Rios Navarro

Posted on

Procesar miles de registros con Spring-Batch

Pongamos como contexto, que se necesita leer desde una base de datos origen y grabar en otra base de datos distinta. Con el propósito de realizar resúmenes y cuadres diarios.


Lo más eficiente será no depender de algún ORM. Por lo que se recomienda emplear JDBC.

Spring-Batch provee un JdbcPagingItemReader el cual, al recuperar los registros de manera paginada no ocupará memoria en retener todo el resultado de la consulta.

También tenemos un JdbcBatchItemWriter para grabar los registros, que los grabarán usando la capacidad batch del driver.

TaskletStep getBuild(ItemReader<T> reader, ItemWriter<T> writer) {
return new StepBuilder(STEP_NAME, jobRepository)
.<T, T>chunk(1000, batchTransactionManager)
.reader(reader)
.writer(writer)
.faultTolerant()
.retryLimit(3)
.retry(Exception.class)
.taskExecutor(batchExecutor)
.build();
}
Step read() throws Exception {
return getBuild(jdbcPagingItemReader(), jdbcBatchItemWriter());
}
@Bean
JdbcPagingItemReader<T> jdbcPagingItemReader() throws Exception {
var pagingItemReader = new JdbcPagingItemReaderBuilder<T>()
.name(READER_NAME)
.dataSource(swliDatasource)
.queryProvider(queryProvider())
.parameterValues(parameterValues())
.rowMapper(mapper)
.pageSize(1000)
.build();
//pagingItemReader.afterPropertiesSet(); Using a Bean
return pagingItemReader;
}
@Bean
JdbcBatchItemWriter<T> jdbcBatchItemWriter() {
JdbcBatchItemWriter<T> writer = new JdbcBatchItemWriter<>();
writer.setDataSource(pmmDatasource);
writer.setSql(INSERT_TABLE);
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
//writer.afterPropertiesSet(); Using a Bean
return writer;
}

Documentación

https://docs.spring.io/spring-batch/docs/current/reference/html/readersAndWriters.html#database

https://docs.spring.io/spring-batch/docs/current/reference/html/scalability.html#scalability

Top comments (0)

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More