在Spring Batch中以多线程步骤写入StepExecutionContext [英] Writing to the StepExecutionContext in multi-threaded steps in Spring Batch

查看:31
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆