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



我使用的是Spring Batch,我创建了一个使用SimpleAsyncTaskExecutor运行的tasklet。在这一步中,我使用检索StepExecutionContext

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

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

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

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

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

1( 如果每个线程有一个信息,那么让线程在上下文中放入一个threadlocal(一次(,然后使用threadlocal存储"信息"。

2( 如果上下文信息是"全局"的,那么您应该在同步块中进行放置,并在放置之前检查其是否存在。

希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新