Spring Batch TaskExecutor配置疑问:块间还是块内并行执行?
Spring Batch 多线程Step执行逻辑说明
配置代码
@Bean public TaskExecutor taskExecutor() { return new SimpleAsyncTaskExecutor("spring_batch"); } @Bean public Step sampleStep(TaskExecutor taskExecutor, JobRepository jobRepository, PlatformTransactionManager transactionManager) { return new StepBuilder("sampleStep", jobRepository) .<String, String>chunk(10, transactionManager) .reader(itemReader()) .writer(itemWriter()) .taskExecutor(taskExecutor) .build(); }
执行逻辑解答
你提到的场景里,5个各包含10条数据的块会并行执行,而单个块内的10条数据依然是串行处理的。
原因在于这种配置属于Spring Batch的「基于块的并行处理」:
- 每个完整的块(读取10条数据、处理、写入)会被封装成一个独立任务,提交给配置的
TaskExecutor调度执行,多个块可在不同线程中同时运行。 - 单个块内的10条数据是在同一个事务中完成读写操作的,事务的原子性要求这个块内的操作必须串行执行,不能拆分到多个线程。
简单总结:块与块之间并行,块内部串行。
内容的提问来源于stack exchange,提问作者Ayush Gupta
相关产品推荐
相关产品推荐

