利用Spring Batch简化企业级批处理应用开发

1. 引言

1.1 批处理的重要性

在现代企业系统中,批处理任务用于处理大量数据,如报表生成、数据迁移、日终结算等。这些任务通常不需要实时响应,但需要高效、可靠地完成。批处理可以显著提高系统性能,减少实时系统的负载,并确保数据的完整性和一致性。

1.2 Spring Batch简介

Spring Batch是Spring框架下的一个子项目,专门用于处理大批量数据的批处理任务。它提供了灵活的配置方式和丰富的功能模块,能够帮助开发者快速构建可靠的批处理应用。Spring Batch的核心组件包括Job(作业)、Step(步骤)、ItemReader(读取器)、ItemProcessor(处理器)和ItemWriter(写入器),并通过Chunk(分块处理)机制优化性能。

2. Spring Batch核心概念

在这里插入图片描述

2.1 Job(作业)

Job代表一个完整的批处理任务,由多个Step组成。每个Job都有唯一的标识符,可以通过参数进行配置。Job的生命周期包括启动、执行、暂停、恢复和结束等状态。开发者可以通过编程或配置文件定义Job的逻辑。

@Configuration
@EnableBatchProcessing
public class BatchConfig {@Autowiredprivate JobBuilderFactory jobBuilderFactory;@Autowiredprivate StepBuilderFactory stepBuilderFactory;@Beanpublic Job exampleJob() {return jobBuilderFactory.get("exampleJob").start(step1()).build();}@Beanpublic Step step1() {return stepBuilderFactory.get("step1").<String, String>chunk(10).reader(itemReader()).processor(itemProcessor()).writer(itemWriter()).build();}
}

2.2 Step(步骤)

Step是Job的基本执行单元,每个Step包含读取、处理和写入三个阶段。Step的设计原则是尽量保持独立性,以便于测试和维护。Step可以配置为不同的模式,如分块处理(Chunk-Oriented Processing)或任务型处理(Tasklet-Based Processing)。

@Bean
public Step step1() {return stepBuilderFactory.get("step1").<String, String>chunk(10).reader(itemReader()).processor(itemProcessor()).writer(itemWriter()).build();
}

2.3 ItemReader(读取器)

ItemReader负责从数据源读取数据,支持多种数据源如文件、数据库、消息队列等。常见的ItemReader实现包括FlatFileItemReader(读取文本文件)、JdbcCursorItemReader(读取数据库记录)和StaxEventItemReader(读取XML文件)。ItemReader可以通过配置文件或编程方式进行定制。

@Bean
public FlatFileItemReader<String> itemReader() {FlatFileItemReader<String> reader = new FlatFileItemReader<>();reader.setResource(new ClassPathResource("input.txt"));reader.setLineMapper(new DefaultLineMapper<String>() {{setLineTokenizer(new DelimitedLineTokenizer());setFieldSetMapper(fieldSet -> fieldSet.readString(0));}});return reader;
}

2.4 ItemProcessor(处理器)

ItemProcessor对ItemReader读取的数据进行处理,如转换、过滤、验证等。ItemProcessor是一个无状态的组件,每次调用时都会接收一个输入项并返回一个输出项。开发者可以根据业务需求实现自定义的ItemProcessor,以满足特定的处理逻辑。

@Bean
public ItemProcessor<String, String> itemProcessor() {return item -> {// 进行处理逻辑return item.toUpperCase();};
}

2.5 ItemWriter(写入器)

ItemWriter将处理后的数据写入目标位置,如数据库、文件、消息队列等。常见的ItemWriter实现包括FlatFileItemWriter(写入文本文件)、JdbcBatchItemWriter(批量写入数据库)和StaxEventItemWriter(写入XML文件)。ItemWriter同样可以通过配置文件或编程方式进行定制。

@Bean
public FlatFileItemWriter<String> itemWriter() {FlatFileItemWriter<String> writer = new FlatFileItemWriter<>();writer.setResource(new FileSystemResource("output.txt"));writer.setLineAggregator(new PassThroughLineAggregator<>());return writer;
}

2.6 Chunk(分块处理)

Chunk机制将数据分成小块处理,每块数据称为一个Chunk。这种方式不仅提高了处理效率,还便于错误处理和资源管理。在Chunk模式下,ItemReader、ItemProcessor和ItemWriter会依次处理每个Chunk中的数据,直到所有数据处理完毕。如果某个Chunk处理失败,可以选择跳过或重试该Chunk。

@Bean
public Step step1() {return stepBuilderFactory.get("step1").<String, String>chunk(10).reader(itemReader()).processor(itemProcessor()).writer(itemWriter()).build();
}

3. Spring Batch配置与使用

3.1 Maven依赖配置

要在项目中使用Spring Batch,首先需要添加Maven依赖。以下是一个典型的Maven依赖配置示例:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope>
</dependency>

3.2 XML配置方式

Spring Batch支持使用XML文件定义Job和Step。以下是一个简单的XML配置示例:

<batch:job id="exampleJob"><batch:step id="step1"><batch:tasklet><batch:chunk reader="itemReader" processor="itemProcessor" writer="itemWriter" commit-interval="10"/></batch:tasklet></batch:step>
</batch:job><bean id="itemReader" class="org.springframework.batch.item.file.FlatFileItemReader"><property name="resource" value="classpath:input.txt"/><property name="lineMapper"><bean class

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/11297.html

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

相关文章

Linux环境下的Java项目部署技巧:环境安装

安装 JDK&#xff1a; 第上传 jdk 压缩安装包到服务器 将压缩安装包解压缩&#xff1a; tar -xvf jdk-8uXXX-linux-x64.tar.gz 配置环境变量&#xff1a; 编辑 /etc/profile 文件&#xff0c;在文件末尾添加以下内容&#xff1a; export JAVA_HOME/path/to/jdk //JAVA_HOME…

w186格障碍诊断系统spring boot设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

PhotoShop中JSX编辑器安装

1.使用ExtendScript Tookit CC编辑 1.安装 打开CEP Resource链接&#xff1a; CEP-Resources/ExtendScript-Toolkit at master Adobe-CEP/CEP-Resources (github.com) 将文件clone到本地或者下载到本地 点击AdobeExtendScriptToolKit_4_Ls22.exe安装&#xff0c;根据弹出的…

如何配置Java JDK

步骤1&#xff1a;点击资源&#xff0c;点击Java下载 https://www.oracle.com/ 步骤2&#xff1a;点击java下载、JDK23下载&#xff0c;下载第一行第一个 步骤3:解压到一个空文件夹下&#xff0c;复制lib地址 步骤4&#xff1a;在设置里面搜索“高级系统设置”&#xff1b;点击…

【Qt】Qt老版本解决中文乱码

修改Pro文件 Qt 老版本&#xff08;Qt5 MSVC2017&#xff0c;其他版本的可以试一试&#xff09;出现中文乱码&#xff0c;只要字符串中有中文就会乱码&#xff1a; 工具->选项->文本编辑器: 修改Pro文件 以上修改后若还乱码&#xff0c;则在项目中的 .pro 文件添加以…

【AI论文】Sigma:对查询、键和值进行差分缩放,以实现高效语言模型

摘要&#xff1a;我们推出了Sigma&#xff0c;这是一个专为系统领域设计的高效大型语言模型&#xff0c;其独特之处在于采用了包括DiffQKV注意力机制在内的新型架构&#xff0c;并在我们精心收集的系统领域数据上进行了预训练。DiffQKV注意力机制通过根据查询&#xff08;Q&…

【人工智能】 在本地运行 DeepSeek 模型:Ollama 安装指南

持续更新。。。。。。。。。。。。。。。 【人工智能】 在本地运行 DeepSeek 模型&#xff1a;Ollama 安装指南 安装 Ollama安装 DeepSeek 模型选择版本 &#xff0c;版本越高&#xff0c;参数越多 性能越好使用 DeepSeek 模型 安装 Ollama 访问 Ollama 官网: 前往 https://oll…

《基于Scapy的综合性网络扫描与通信工具集解析》

在网络管理和安全评估中&#xff0c;网络扫描和通信是两个至关重要的环节。Python 的 Scapy 库因其强大的网络数据包处理能力&#xff0c;成为开发和实现这些功能的理想工具。本文将介绍一个基于 Scapy 编写的 Python 脚本&#xff0c;该脚本集成了 ARP 扫描、端口扫描以及 TCP…

通信易懂唠唠SOME/IP——SOME/IP协议简介

一 简介 1.1 面向服务的中间件 SOME/IP是Scalable service-Oriented MiddlewarE over IP (SOME/IP)的缩写&#xff0c;基于IP的可扩展面向服务的中间件。 1.2 广泛应用于汽车嵌入式通信 SOME/IP是一种支持远程通信的汽车/嵌入式通信协议 。支持远程过程调用&#xff08;RPC…

高温环境对电机性能的影响与LabVIEW应用

电机在高温环境下的性能可能受到多种因素的影响&#xff0c;尤其是对于持续工作和高负荷条件下的电机。高温会影响电机的效率、寿命以及可靠性&#xff0c;导致设备出现过热、绝缘损坏等问题。因此&#xff0c;在设计电机控制系统时&#xff0c;特别是在高温环境下&#xff0c;…

[SAP ABAP] SE11 / SE16N 修改标准表(慎用)

1.SE16N修改标准表 使用事务码ME16N进入到查询页面&#xff0c;填入要修改的标准表MARA&#xff0c;在事务码输入框中填入/H&#xff0c;回车之后点击按钮&#xff0c;进入Debug调试界面 把GD-SAPEDIT 与 GD-EDIT 的值更改为X然后点击按钮(快捷键按F8)进行下一步操作 可以在此…

小米CR6606,CR6608,CR6609 启用SSH和刷入OpenWRT 23.05.5

闲鱼上收了一台CR6606和一台CR6609, 一直没时间研究, 趁春节假期把这两个都刷成 OpenWRT 配置说明 CPU: MT7621AT&#xff0c;双核880MHz内存: NT5CC128M16JR-EKI 或 M15T2G16128A, 256MB闪存: F59L1G81MB, 128MB无线基带芯片(BB): T7905DAN无线射频芯片(RF): MT7975DN无外置F…

CSS(快速入门)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导&#xff0c;有错误的地方会改进的哦~点击这里了解更多内容 目录 一、什么是CSS?二、基本语法规范三、CSS选择器3.1 标签选择器3.2 id选择器3.3 class选择器3.4 通配符选择器3.5 复合选择器 四、常用CSS样式4.1 color4.2 font…

Qt事件处理:理解处理器、过滤器与事件系统

1. 事件 事件 是一个描述应用程序中、发生的某些事情的对象。 在 Qt 中&#xff0c;所有事件都继承自 QEvent &#xff0c;并且每个事件都有特定的标识符&#xff0c;如&#xff1a;Qt::MouseButtonPress 代表鼠标按下事件。 每个事件对象包含该事件的所有相关信息&#xff…

Observability:实现 OpenTelemetry 原生可观察性的商业价值

作者&#xff1a;来自 Elastic David Hope 利用开放标准和简化的数据收集转变组织的可观察性策略。 现代组织面临着前所未有的可观察性挑战。随着系统变得越来越复杂和分散&#xff0c;传统的监控方法难以跟上步伐。由于数据量每两年翻一番&#xff0c;系统跨越多个云和技术&am…

deep generative model stanford lecture note2 --- autoregressive

1 Introduction 在note1 已经明确了生成模型&#xff0c;是通过概率分布来拟合数据&#xff0c;这个部分采用自回归的模型结构来拟合数据。主要任务包括&#xff1a;选择什么样的自回归模型结构和设计什么样的loss函数来让模型收敛。 自回归模型结构的理论基础还是贝叶斯概率结…

C++模板初了解

这节我们来学习一下C的一个便捷之处——模板 文章目录 一、泛型编程 泛型编程的基本思想 泛型编程的优点 泛型编程的应用 二、模板 函数模板 函数模板格式 函数模板的原理 函数模板的实例化 1.隐式实例化 2.显示实例化 函数模板的匹配原则 类模板 类模板的格式 类模板的实例化 …

PPT演示设置:插入音频同步切换播放时长计算

PPT中插入音频&同步切换&放时长计算 一、 插入音频及音频设置二、设置页面切换和音频同步三、播放时长计算 一、 插入音频及音频设置 1.插入音频&#xff1a;点击菜单栏插入-音频-选择PC上的音频&#xff08;已存在的音频&#xff09;或者录制音频&#xff08;现场录制…

React

1. React 基础 1) 环境准备 创建项目 首先&#xff0c;通过 react 脚手架创建项目 npx create-react-app client --template typescriptclient 是项目名目前 react 版本是 18.x 运行项目 cd client npm start会自动打开浏览器&#xff0c;默认监听 3000 端口 修改端口 在…

[ESP32:Vscode+PlatformIO]新建工程 常用配置与设置

2025-1-29 一、新建工程 选择一个要创建工程文件夹的地方&#xff0c;在空白处鼠标右键选择通过Code打开 打开Vscode&#xff0c;点击platformIO图标&#xff0c;选择PIO Home下的open&#xff0c;最后点击new project 按照下图进行设置 第一个是工程文件夹的名称 第二个是…