【发布时间】:2011-06-30 11:40:00
【问题描述】:
我正在使用 Spring Batch,并且我创建了一个使用 SimpleAsyncTaskExecutor 运行的 tasklet。在这一步中,我使用
StepExecutionContext
@BeforeStep
public void saveStepExecution(StepExecution stepExecution) {
this.stepExecution = stepExecution;
}
在tasklet的处理方法中,我尝试更新上下文:
stepExecution.getExecutionContext().put("info", contextInfo);
这会导致stepExecution 上的ConcurrentModificationExceptions。
在这个多线程环境中如何避免这些并更新我的上下文?
【问题讨论】:
-
请提供更多信息,例如哪个spring批处理版本和tasklet实现的来源
-
SpringBatch 2.1.8。回答问题需要哪些实现细节?
-
如果你用'org.springframework.batch.core.step.tasklet.Tasklet'实现了一个tasklet,你需要实现'RepeatStatus execute(StepContribution贡献,ChunkContext chunkContext)'并且在chunkContext里面是一个可修改的 stepExecutionContext,你使用 BeforeStep Annotation 来获取 stepExecution,所以我不确定你的“tasklet”是什么样的,或者它是否是一个“Tasklet”
标签: multithreading spring spring-batch