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

Spring Batch的2种STEP定义方式

Spring Batch的2种STEP定义方式

1. 第一种:基于Chunk-Oriented Processing(read,process,write)形式

适用场景

  • 大数据量批处理:适合需要分批次读取、处理并写入大量数据的场景(如数据库批量更新、文件导入导出)
  • 事务敏感操作:每个Chunk(数据块)作为一个独立事务提交,避免长事务导致的资源锁(如数据库锁表)
  • 数据流水线处理:需对数据逐条转换、过滤或聚合的场景(如ETL任务)

核心特点

  • 分块处理:通过chunkSize控制单次处理的数据量(例如每次读取100条),平衡内存与性能
  • 代码量较tasklet重:开发者需实现ItemReader ItemProcessor ItemWriter 接口,且STEP上下文需用到StepExecutionListener接口;自定义实现类。
@Bean
public Step print1Step(){return stepBuilderFactory.get("updateProductStockQuantityStep").listener(step1StepListener)//步骤监听.<Product, Product>chunk(10)//每批处理数量.reader(step1ItemReader)//读.processor(step1Processor)//处理.writer(step1Writer)//写.build();
}

2. 第二种:基于tasklet形式

适用场景

  • 非数据驱动任务:适合不需要分块处理的原子性操作,如初始化、清理或调用外部服务
  • 灵活控制逻辑:需自定义执行流程(如条件分支、循环)的场景
  • 单一事务需求:整个Step在一个事务中完成,适合不可拆分的操作(如文件压缩、发送通知)

核心特点

  • 简单接口:仅需实现 execute() 方法,返回RepeatStatus.FINISHEDCONTINUABLE支持循环执行)
  • 全事务控制:整个Tasklet作为单一事务,要么完全成功要么完全回滚
  • 无数据分块:不涉及ItemReader/Processor/Writer,适合非结构化任务
@Bean(name = {"printOverStep"})
public Step printOverStep(){return stepBuilderFactory.get("step3").tasklet((contribution, chunkContext) -> {...//业务逻辑return RepeatStatus.FINISHED;}).build();
}

RepeatStatus返回类型有

  • CONTINUABLE:表示当前任务尚未完成,需要继续执行下一次迭代(例如处理下一个数据块)
  • FINISHED:表示当前任务已执行完毕,终止后续迭代,执行下一个STEP

简单来说:需要继续干活就CONTINUABLE,干完了就FINISHED

http://www.lryc.cn/news/609409.html

相关文章:

  • 最新Android Studio汉化教程--兼容插件包
  • c++ --- priority_queue的使用以及简单实现
  • 时序论文44 | TwinsFormer:通过两个交互组件重构时间序列内在依赖关系
  • 算法竞赛阶段二-数据结构(39)数据结构栈模拟实现
  • 06.Redis 配置文件说明
  • 第13章 文件输入/输出
  • MySQL半同步复制机制详解:AFTER_SYNC vs AFTER_COMMIT 的优劣与选择
  • 前后端交流
  • Git常用命令详解
  • RSA 解密逻辑
  • 微服务的使用
  • AI生成图片工具分享!
  • 常见框架漏洞靶场攻略
  • 【LeetCode刷题指南】--对称二叉树,另一颗树的子树
  • C++入门自学Day5-- C/C++内存管理(续)
  • C语言数据结构(7)贪吃蛇项目2.贪吃蛇项目实现
  • Linux 文件系统基本管理
  • python 12 install jupyter时zmq.h或libzmq报错处理
  • 基于springboot的在线考试系统/考试信息管理平台
  • 苍穹外卖项目学习——day1(项目概述、环境搭建)
  • 团队独立思考的力量
  • 机器学习——决策树(DecisionTree)
  • 波士顿房价预测工具 - XGBoost实现
  • 三、驱动篇-HDF驱动介绍1
  • 【Unity】背包系统 + 物品管理窗口 (上)
  • Python 的标准库 bisect 模块
  • 从WebShell 与 ShellCode 免杀技术 打造适合自己的免杀技术链
  • [Oracle] 获取系统当前日期
  • 使用AssemblyAI将音频数据转换成文本
  • [Oracle] TO_DATE()函数