我们有一个Spring批处理应用程序,其工作是从Oracle数据库中读取200万条记录(使用Hibernate),处理和更新数据库中的记录。我们正在使用ItemReader<List<Employee>>
并读取所有记录作为列表,但结果限制为1000(通过在select查询中设置query.maxResults(1000)
)。
记录将被一个接一个地处理并更新到数据库中。我正在使用gridsize
10和ThreadPoolTaskExecutor
10的RangePartitioner
现在,在这种情况下应该如何设置corePoolSize
。在配置中,我将ot设置为app.chunk.commit.interval
。
我使用了下面的ChunkListener,下面是输出。为什么提交的项目被打印为3
。请帮助我理解。
1
}
public class CustomItemReader implements ItemReader<List<Employee>>,ChunkListener {
@Override
public void afterChunk(ChunkContext chunkContext) {
System.out.println("Items Read "+ chunkContext.getStepContext().getStepExection().getReadCount());
System.out.println("Items Written "+ chunkContext.getStepContext().getStepExection().getWriteCount());
System.out.println("Items Committed "+ chunkContext.getStepContext().getStepExection().getCommitCount());
}
@Override
public void afterChunkError(ChunkContext chunkContext) {
}
@Override
public void beforeChunk(ChunkContext chunkContext) {
System.out.println("Chunk processing started " + chunkContext);
}