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.pswp.cn/web/91876.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端JS-调用单删接口来删除多个选中文件

当开发中遇到&#xff1a;服务端没有删除多个文件功能接口&#xff0c;只有单个删除文件功能接口时&#xff0c;会遇到如何多选删除文件效果最佳。await Promise.all(selectedDocPaths.map(async (path) > {try {await fileDelete(path)} catch (err) {throw new Error(删除…

机器学习——过采样(OverSampling),解决类别不平衡问题,案例:逻辑回归 信用卡欺诈检测

下采样&#xff1a;机器学习——下采样&#xff08;UnderSampling&#xff09;&#xff0c;解决类别不平衡问题&#xff0c;案例&#xff1a;逻辑回归 信用卡欺诈检测-CSDN博客 &#xff08;完整代码在底部&#xff09; 解决样本不平衡问题&#xff1a;SMOTE 过采样实战讲解 …

Ettus USRP X440 进行“超短波个人卫星信号的侦查与干扰”任务

结合 Ettus USRP X440 进行“超短波个人卫星信号的侦查与干扰”任务&#xff0c;可以构建一个高性能、灵活可编程的电子对抗系统原型平台。以下是面向科研/工程/军用验证场景的构思和技术文案&#xff1a; &#x1f6f0;️ 项目名称建议&#xff08;可选&#xff09;&#xff1…

如何在出售Windows11/10/8/7前彻底清除电脑数据

为了保护您的个人数据&#xff0c;在出售电脑前彻底清除数据是一个明智之举。然而&#xff0c;仅仅删除文件是不够的&#xff0c;因为恢复工具通常可以恢复它们。因此&#xff0c;本指南分享了如何在出售电脑前清除数据&#xff0c;包括 Windows 11/10/8/7&#xff0c;确保您的…

Go语言实战案例:多协程并发下载网页内容

本文是《Go语言100个实战案例 网络与并发篇》第6篇&#xff0c;实战演示如何使用 Goroutine 和 Channel&#xff0c;实现多协程并发抓取网页内容&#xff0c;提升网络请求效率&#xff0c;为构建爬虫、内容聚合器、API 批量采集器打下基础。一、实战背景在互联网项目中&#x…

分享链接实现状态共享

有这么一个场景&#xff1a;就是有一些列表页面&#xff0c;然后上面是有一些筛选项的&#xff0c;我去对这个列表做了一些筛选出来一个结果&#xff0c;然后我想把这个链接&#xff0c;或者说把这个筛选结构给分享出去&#xff0c;让别人在打开这个页面的时候&#xff0c;也是…

Fay数字人如何使用GPT-SOVITS进行TTS转换以及遇到的一些问题

一、GPT-SoVITS 简介 GPT-SoVITS 是一款开源的语音合成&#xff08;TTS&#xff09;工具&#xff0c;结合了 GPT 模型的文本理解能力与 SoVITS&#xff08;Sound of Voice In Text-to-Speech&#xff09;的声纹模拟技术&#xff0c;能够实现高自然度、个性化的语音合成。它支持…

HTML 颜色值

HTML 颜色值 引言 在网页设计和开发中,颜色是一个重要的元素,它能够帮助用户更好地理解内容,提升视觉效果。HTML 颜色值是用于指定网页中元素颜色的一种标准表示方法。本文将详细介绍 HTML 颜色值的种类、表示方法以及在实际应用中的使用技巧。 HTML 颜色值种类 HTML 颜…

关于记录一下“bug”,在做图片上传的时候出现的小问题

项目场景&#xff1a;之前的话写过csdn&#xff0c;最近出现了一些小事情&#xff0c;所以耽误了好久没有更新&#xff0c;最近把以前的项目拿出来然后改了下环境就出现了一些问题&#xff0c;该项目使用SpringBoot3.5 SpringMVC Mybatis-Plus3.5.0&#xff0c;然后权限控制采…

数据结构:基础知识和链表①

一、概念程序数据结构算法1.描述数据存储和操作的结构 2.操作数据对象的方法二、衡量代码的质量和效率 无论代码操作数据量多大&#xff0c;希望程序代码的运行时间保持恒定 随着数据的增长&#xff0c;程序运行时间缓慢增长随着数据的增长&#xff0c;程序运…

进阶向:自动化天气查询工具(API调用)

自动化天气查询工具&#xff08;API调用&#xff09;完全指南天气数据是日常生活中经常需要查询的信息之一。本教程将介绍如何使用Python编写一个自动化天气查询工具&#xff0c;通过调用开放的天气API获取实时天气数据。这个工具适合完全不懂编程的新手学习&#xff0c;将从最…

【ROS2】常用命令

1、目录结构在 ROS 2 包中&#xff0c;launch、urdf、rviz&#xff08;通常指 RViz 配置文件&#xff09;、config 等文件夹应直接放在包的根目录下&#xff08;与 robot_arm/ Python 模块目录同级&#xff09;。这是 ROS 2 社区的通用约定&#xff0c;便于工具&#xff08;如 …

基础组件(三):mysql连接池

文章目录一、MySQL连接池设计1. 连接池解决了什么问题&#xff1f;连接池的作用 &#xff08;好处&#xff09;为什么不创建多条连接而用连接池2. 同步和异步连接池的区别同步连接池&#xff08;场景局限&#xff0c;应用服务器启动时初始化资源&#xff09;异步连接池&#xf…

FI文件包含漏洞

本地文件包含&#xff08;LFI&#xff09;文件包含开发人员将可重复使用的内容写到单个文件中&#xff0c;使用时直接调用此文件&#xff0c;无需再次编写&#xff0c;这种调用文件的过程一般被称为文件包含。这样编写代码能减少代码冗余&#xff0c;降低代码后期维护难度&…

rapidocr_web v1.0.0发布了

建立RapidOCRWeb独立仓库 终于将web这块代码移了出来&#xff0c;成立了独立仓库RapidOCRWeb (https://github.com/RapidAI/RapidOCRWeb )。这样以来&#xff0c;RapidOCR仓库下的各个衍生项目均有自己的独立仓库&#xff0c;可以单独控制发版和维护。这也算是为RapidOCR减负了…

Arduino IDE离线安装ESP8266板管理工具

文章目录概要官网地址开发板管理地址安装ESP8266开发板支持离线安装额外记录NODE启动服务概要 Arduino IDE离线安装ESP8266板管理工具&#xff0c;在线安装因为网络或者https的问题不能安装 官网地址 Adruino&#xff1a;https://www.arduino.cc/ ESP8266项目&#xff1a;<…

两款免费数据恢复软件介绍,Win/Mac均可用

数据已成为我们生活与工作中不可或缺的重要组成部分。无论是珍贵的家庭照片、关键的工作文档&#xff0c;还是重要的学习资料&#xff0c;都以数据的形式存储在各类设备中。然而&#xff0c;数据丢失的情况却时常发生&#xff0c;可能是误操作删除&#xff0c;可能是设备意外损…

Java开发中敏感信息加密存储全解析:筑牢数据安全防线

Java开发中敏感信息加密存储全解析&#xff1a;筑牢数据安全防线 一、引言 1.1 敏感信息存储的现状与挑战 在数字化时代&#xff0c;数据已然成为企业和组织的核心资产之一&#xff0c;而敏感信息的存储更是重中之重。从日常的用户登录密码、身份证号码&#xff0c;到金融领域…

list的使用和模拟

(一)list的了解 (1)简单了解 list的文档介绍 list是基于双向链表的序列式容器&#xff0c;支持双向迭代和任意位置的常数时间插入删除&#xff0c;相比 array、vector 等容器在这类操作上更高效&#xff0c;但不支持随机访问&#xff08;访问需线性遍历&#xff09;且因额外…

Docker 初学者需要了解的几个知识点 (五):建容器需要进一步了解的概念

之前在《Docker 初学者需要了解的几个知识点》几篇文章里&#xff0c;我们梳理了 Docker 的核心概念&#xff08;如镜像、容器、网络等&#xff09;&#xff0c;但在实际搭建 ThinkPHP 容器环境时&#xff0c;又遇到了一些更具体的术语和配置场景。这些内容和实操结合紧密&…