在Spring Batch中以多线程步骤写入StepExecutionContext

时间:2011-06-30 11:40:00

标签: multithreading spring spring-batch

我使用的是Spring Batch,我创建了一个使用SimpleAsyncTaskExecutor运行的tasklet。在此步骤中,我正在使用

检索StepExecutionContext
@BeforeStep
public void saveStepExecution(StepExecution stepExecution) {
    this.stepExecution = stepExecution;
}

在tasklet的处理方法中,我尝试更新上下文:

stepExecution.getExecutionContext().put("info", contextInfo);

这导致ConcurrentModificationException上的stepExecution s。 如何避免这些并在此多线程环境中更新我的上下文?

1 个答案:

答案 0 :(得分:0)

步骤执行上下文是共享资源。你真的想在每个帖子中放一个“信息”吗?根据您的上下文,有很多方法可以解决这个问题,因为它是一个线程问题,而不是Spring批处理。

1)如果每个线程有一个信息,让线程在上下文中放置一个threadlocal(一次),然后使用threadlocal存储“info”。

2)如果上下文信息是“全局”的,那么你应该在同步块中执行put并在放入之前检查它是否存在。

希望这有帮助。