我正在使用 Spring Batch,并且创建了一个使用SimpleAsyncTaskExecutor
。在这一步中,我正在检索StepExecutionContext
with
@BeforeStep
public void saveStepExecution(StepExecution stepExecution) {
this.stepExecution = stepExecution;
}
在tasklet的处理方法中,我尝试更新上下文:
stepExecution.getExecutionContext().put("info", contextInfo);
这导致ConcurrentModificationException
是在stepExecution
。
我怎样才能避免这些并在这个多线程环境中更新我的上下文?
步骤执行上下文是共享资源。您真的想在每个线程中放置一个“信息”吗?根据您的上下文,有很多方法可以解决这个问题,因为这是一个线程问题,而不是 Spring 批处理。
1)如果每个线程有一个信息,则让线程在上下文中放置一个线程本地(一次),然后使用线程本地来存储“信息”。
2)如果上下文信息是“全局”的,那么您应该将其放入同步块中,并在放入之前检查其是否存在。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)