当前位置: 首页 > news >正文

Spring Batch 容错机制分析

Chunk 事务边界

  • Spring Batch 会在 每个 chunk 的处理周期 开始时开启一个事务。

  • 这个事务覆盖 读 → 处理 → 写 的整个过程。

  • ItemWriter.write() 执行完成后,事务才会提交。

Retry 成功的情况

  • 流程
    • ItemReaderItemWriter 抛出异常时,如果配置了 .retry(Exception.class),Spring Batch 会在同一个 chunk 的事务上下文里对该条记录进行重试。
    • 如果在重试次数限制内 最终成功,那么这个 chunk 会继续执行,最后事务会 正常提交
  • 事务结果
    • 不会回滚,因为最终是成功的。
    • 之前的失败尝试只是在内存和日志层面记录,不会导致事务提交或回滚。

👉 换句话说:Retry 成功 = 事务继续,最终提交


 Skip 的情况

  • Skip 生效时

    • 如果异常在允许的 skip 范围内(未超过 skipLimit),Spring Batch 会“丢掉”这条坏数据,但 整个 chunk 的事务依然提交

    • 这样保证了其他正常数据不会丢失。

  • SkipLimit 超过时

    • 一旦跳过次数超过 skipLimit,Spring Batch 会认为 Step 失败。

    • 当前正在执行的 chunk 事务会 回滚,因为它没能成功完成。

    • Step 状态会标记为 FAILED,Job 是否失败取决于后续配置(比如 allowStartIfCompleteJob flowon("FAILED") 分支等)。


⚖️ 总结对比

情况行为事务结果
Retry 成功重试后成功,继续执行事务正常提交
Retry 失败 + Skip(未超限)记录失败数据,跳过继续事务提交(跳过的数据不写出)
Retry 失败 + Skip(超限)Step 失败整个 chunk 回滚,job 可能失败
Retry 失败 + 未配置 SkipStep 失败整个 chunk 回滚

✅ 最佳实践

  • Retry 用于处理临时性错误(如网络抖动、死锁)。
  • Skip 用于处理“坏数据”或不可恢复的异常(如格式错误、违反约束)。
  • 两者结合使用,可以保证批处理既 健壮(不会因为个别坏数据中断),又 可靠(临时错误能自动恢复)。
http://www.dtcms.com/a/478127.html

相关文章:

  • 【C++ Primer】第三章:字符串、向量与数组
  • Allegro X Advanced Designer 23.1 设计约束
  • 【Leetcode hot 100】4.寻找两个正序数组的中位数
  • HTB 赛季9靶场 - Signed
  • 任务栏透明度调节工具
  • 网站企业电子商务网站建设教学计划
  • 淘宝一番赏抽赏小程序:开启趣味抽赏新体验
  • 上海专业网站建站扬州北京网站建设
  • HTTP初识(二)
  • 【10 分钟!M4 Mac mini 离线部署「私有 ChatGPT」完整实录】
  • 怎么给网站做动图网络营销中的四种方法
  • API测试 | 3步走,通过协作实现API的高质量交付
  • 消息鉴别码的种类
  • C++设计模式之行为型模式:策略模式(Strategy)
  • 接口安全测试实战:从数据库错误泄露看如何构建安全防线
  • h5游戏网站建设做网站被网警找
  • 微美全息(NASDAQ:WIMI)融合区块链+AI+IoT 三大技术,解锁物联网入侵检测新范式
  • Shiro_认证绕过漏洞复现:原理详解+环境搭建+渗透实践(CVE-2020-1957)
  • 三维实时渲染应用开发及场景设计
  • RK3588 + 银河麒麟部署 swarm 集群指南
  • 基于 PyTorch 实现 MNIST 手写数字识别
  • 网站建设找王科杰信誉wordpress企业产品列表
  • 深入 Spring 依赖注入底层原理
  • WebRTC技术如何实现音视频通话
  • 韩国免费行情网站的推荐理由门户网站建设工作会议
  • Python psycopg2 教程
  • 5CEBA2U15I7N 阿尔特拉 Altera Cyclone V FPGA
  • 辉县市工程建设网站建设网站做宣传的免费渠道有那种
  • 2025年10月13日总结
  • perl-Test-Simple-1.302195-5.fc39.noarch.rpm 怎么安装?Fedora 39 安装步骤讲解