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

2023-12-13

我正在使用 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(使用前将#替换为@)

在 Spring Batch 中的多线程步骤中写入 StepExecutionContext 的相关文章

随机推荐

  • 使用 fork 显示循环中的进程数

    如何显示创建的进程数 不使用公式 for i 0 i lt 3 i fork count count 1 printf d count 有多种方法可以做到这一点 一个好的技术是让每个子进程将一个字节写入原始进程可以读取的文件描述符中 请注意
  • iPhone Web 应用程序缓存持久性

    如何编写一个 ASP NET C 应用程序 该应用程序将呈现一个页面 当该页面被添加为 主屏幕图标 时 可以永久缓存在 iPhone 上 我尝试在 Response ExpiresAbsolute DateTime MaxValue 后面的
  • 为 C++(指针)创建 swig 包装器到 python

    我对 swig 非常陌生 我正在尝试创建一个 swig 包装器 以便在 python 中使用一些 C 文件 我有以下 C 课程 以下是我尝试转换的代码片段 packet buffer h class CPacketBuffer public
  • ember-cli (2.4.3) 不生成 DS 模型

    我很惊讶在生成 ember cli 模型时没有获得 DS 模型 ember v ember cli 2 4 3 node 5 10 1 os darwin x64 ember g model rental 然后我得到 app models
  • MySQL 在结果集中添加缺失的月份

    我正在尝试在此结果集中添加缺失的月份 如果缺少月份 请添加值 0Quantita SELECT MONTH Data AS Mese Count AS Quantita FROM prenotazioni WHERE Cancellata
  • 使用 Python 绘图

    我有一个 txt 文件 从中找到有序对 然后使用 numpy 和 matplotlib 绘制图形 例如 这些是我订购的对 4 0 0 0 6 0 6 0 0 0 3 0 每个子列表代表最终图形中的一条线 图形如下所示 但我想找到两条线之间的
  • 同步运行摩卡测试

    我有以下设置来运行 it 测试 X is environment variable if X all X some value read directory and run test using it with callbacks if X
  • 使用 Google App Engine 时无法导入 Flask

    我正在跟进本指南并尝试开发一个在 Google App Engine 上运行的 Flask 应用程序 我按照这封信的指南进行操作 但是当我从启动器启动开发应用程序服务器并转到http localhost 8080 com 我收到 HTTP
  • SoftLayer 中的对象过滤器不起作用

    我发现 ObjectFilter 在 SoftLayer 中不起作用 我什至尝试了 SoftLayer 网页中提供的示例 https sldn softlayer com article object filters REST 列出 ID
  • FBLPromises.framework 不包含位码 - 构建失败

    即使在我的 Podfile 中将 Bitcode 设置为 No 后 我也会收到以下错误 这种情况发生在不同的 Xcode 中 最高版本为 14 0 此时我收到签名错误 这也是没有意义的 因为我已经在所有目标上建立了开发团队 错误 Xcode
  • C# System.Diagnostics.Process:无法在 64 位操作系统中启动 32 位 exe 文件

    我有一个用 Turbo Pascal 编译的 32 位 exe 文件 我需要启动它 当我使用 Windows 7 32 位时它运行良好 但现在我使用 Windows 7 64 位 并且出现以下异常 指定的可执行文件不是此操作系统平台的有效应
  • 如何用 na.spline 替换 data.table 中的 NA 值

    我正在尝试准备从欧盟统计局检索到的一些人口统计数据以供进一步处理 其中包括用相应的近似数据替换任何丢失的数据 首先我只使用 data frames 但后来我确信 data tables 可能比常规 data frames 提供一些优势 所以
  • 如何在 Excel WebBrowser 控件上调整图像大小

    我有名为的 WebBrowser 控件WebBrowser1 我使用此代码通过 URL 显示图像 WebBrowser1 Navigate https cdn2 iconfinder com data icons modern latin
  • jsp 中的通用链接、变量和路径

    Requests 仅当您深入了解其含义时才请回答 我从中找到帮助的相关问题 JSP JSTL 中的嵌套表达式 我想让我的链接 路径和变量 用于图像 脚本和其他页面和包含内容 通用 以便将来重构或更改文件位置不会产生大问题 我的想法是 变量
  • 无法在 Internet Explorer 11 上运行量角器

    我正在尝试在 IE11 上运行我的 jasmine E2E 测试 但没有运气或发生任何情况 我使用的是 Windows 8 1 我的配置 exports config directConnect true Capabilities to b
  • 将多个自定义栏按钮添加到自定义导航栏

    我需要在我的每一端添加两个栏按钮项目customSwift 中的导航栏 我正在使用以下方法 虽然我没有收到任何错误 但什么也没有出现 我正在使用自己的自定义图标 当我使用界面生成器添加它们时 它们确实会出现 显然 我只能这样在两端添加一个
  • 是否允许在 1 个项目中使用多个 YouTube API 密钥?

    在仅使用 1 个 API 密钥使用 YouTube Data API v3 进行搜索时 我很快就达到了配额限制 我已申请增加配额 但听说这可能需要一些时间 不过 我发现下面的文章指出 1 个项目最多可以使用 300 个 API 我真的可以使
  • Windows XP/Delphi 7 中的持久对象

    我正在尝试在 Delphi 7 Windows XP 中制作 AlarmSystem 我必须在数据库 MS SQL Server 2000 中注册警报 但是如果服务器宕机了怎么办 好吧 我可以想象我必须保留 TAlarm 类型的对象 那么
  • 使用 JAVA 从 CSV 更新 MySQL

    我的问题如下 CSV 文件按照给定的时间间隔从服务器下载 必须解析文件 必须删除不必要的空格 必须为每个条形码更新商品价格 建议零售价和库存数量 每个 CSV 行包含商品编号 产品标题 仓库 ID 仓库名称 价格 RRP 价格 库存和条形码
  • 在 Spring Batch 中的多线程步骤中写入 StepExecutionContext

    我正在使用 Spring Batch 并且创建了一个使用SimpleAsyncTaskExecutor 在这一步中 我正在检索StepExecutionContext with BeforeStep public void saveStep