1

我正在使用 Spring Batch,并且我创建了一个使用SimpleAsyncTaskExecutor. 在这一步中,我正在检索StepExecutionContextwith

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

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

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

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

4

1 回答 1

1

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

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

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

希望这可以帮助。

于 2011-07-28T20:51:23.843 回答