【发布时间】:2019-10-05 04:54:38
【问题描述】:
我遇到了一个关于带有任务执行器的春季批处理小任务步骤的奇怪问题。配置正常简单,就是一个tasklet(不面向chunk)如下:
<batch:job id="MyJob" restartable="false">
<batch:step id="MyJob.Step1">
<batch:tasklet ref="someBean" task-executor="simpleAsyncTaskExecutor" throttle-limit="1"/>
</batch:step>
</batch:job>
someBean 是一个实例实现的Tasklet 接口。奇怪的是,当我启动作业时,execute 方法调用了两次:
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
// some logic and no exception
return RepeatStatus.FINISHED;
}
实际上创建了两个线程并执行了两次逻辑。如果我将任务执行器更改为正常
task-executor="syncTaskExecutor" (org.springframework.core.task.SyncTaskExecutor) ,只创建了一个线程并调用了一次execute()。
有没有人遇到过这种情况并可以给出一些想法?真不知道“谁”和“什么时候”创建了两个线程?谢谢
【问题讨论】:
标签: spring multithreading spring-batch