在Spring Batch中以多线程步骤写入StepExecutionContext [英] Writing to the StepExecutionContext in multi-threaded steps in Spring Batch
本文介绍了在Spring Batch中以多线程步骤写入StepExecutionContext的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用的是Spring Batch,并且我已经创建了一个使用SimpleAsyncTaskExecutor
运行的微线程。在此步骤中,我使用
StepExecutionContext
@BeforeStep
public void saveStepExecution(StepExecution stepExecution) {
this.stepExecution = stepExecution;
}
在微线程的处理方法中,我尝试更新上下文:
stepExecution.getExecutionContext().put("info", contextInfo);
这将导致ConcurrentModificationException
上的ConcurrentModificationException
%s。
如何在此多线程环境中避免这些问题并更新上下文?
推荐答案
步骤执行上下文是共享资源。你真的想让每个帖子都有一个"信息"吗?根据您的上下文,有很多方法可以解决这个问题,因为这是一个线程问题,而不是Spring Batch。
1)如果每个线程有一个信息,请让该线程在上下文中放置一个threadlocal(一次),然后使用threadlocal存储"info"。
2)如果上下文信息是"全局的",那么您应该在同步的挡路中进行PUT,并在PUT之前检查它是否存在。
希望这对您有帮助。
这篇关于在Spring Batch中以多线程步骤写入StepExecutionContext的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文