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

Spring Batch使用详细例子

Spring Batch 是一个开源的批处理框架,它提供了一种简单的方式来处理大规模的数据处理任务。它基于 Spring 框架,可以与 Spring 的其他组件无缝集成,如 Spring Boot、Spring Data 等。本文将介绍如何使用 Spring Batch 进行批处理任务。
1. 准备工作
在开始使用 Spring Batch 之前,需要先准备好以下环境:
- JDK 1.8 或以上版本
- Maven 或 Gradle
- IDE,如 Eclipse 或 IntelliJ IDEA
2. 创建 Spring Batch 项目
使用 Maven 或 Gradle 创建一个 Spring Boot 项目,然后添加 Spring Batch 的依赖。在 Maven 中添加以下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-batch</artifactId>
</dependency>
在 Gradle 中添加以下依赖:
implementation 'org.springframework.boot:spring-boot-starter-batch'
3. 创建 Job在 Spring Batch 中,Job 是一个批处理任务的最高级别的抽象。一个 Job 包含了多个 Step,每个 Step 执行一个具体的任务。
创建一个 Job 需要实现 Job 接口,并重写 execute 方法。例如,创建一个简单的 Job,它只包含一个 Step:
@Configuration
public class SimpleJobConfig {@Autowiredprivate JobBuilderFactory jobBuilderFactory;@Autowiredprivate StepBuilderFactory stepBuilderFactory;@Beanpublic Step simpleStep() {return stepBuilderFactory.get("simpleStep").tasklet((contribution, chunkContext) -> {System.out.println("Hello, World!");return RepeatStatus.FINISHED;}).build();}@Beanpublic Job simpleJob() {return jobBuilderFactory.get("simpleJob").start(simpleStep()).build();}}
在上面的代码中,我们创建了一个名为 simpleJob 的 Job,它包含了一个名为 simpleStep 的 Step。simpleStep 执行了一个简单的任务,输出了一条消息。
4. 创建 ItemReader 和 ItemWriter
在 Spring Batch 中,ItemReader 用于读取数据,ItemWriter 用于写入数据。它们通常与 Step 一起使用,用于处理大量数据。
创建一个 ItemReader 需要实现 ItemReader 接口,并重写 read 方法。例如,创建一个从文件中读取数据的 ItemReader:
@Bean
public FlatFileItemReader<Person> personItemReader() {FlatFileItemReader<Person> reader = new FlatFileItemReader<>();reader.setResource(new ClassPathResource("people.csv"));reader.setLineMapper(new DefaultLineMapper<Person>() {{setLineTokenizer(new DelimitedLineTokenizer() {{setNames(new String[]{"firstName", "lastName"});}});setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{setTargetType(Person.class);}});}});return reader;
}
在上面的代码中,我们创建了一个名为 personItemReader 的 ItemReader,它从一个 CSV 文件中读取数据,并将每行数据映射到一个 Person 对象中。
创建一个 ItemWriter 需要实现 ItemWriter 接口,并重写 write 方法。例如,创建一个将数据写入数据库的 ItemWriter:
@Bean
public JdbcBatchItemWriter<Person> personItemWriter(DataSource dataSource) {JdbcBatchItemWriter<Person> writer = new JdbcBatchItemWriter<>();writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");writer.setDataSource(dataSource);return writer;
}
在上面的代码中,我们创建了一个名为 personItemWriter 的 ItemWriter,它将数据插入到一个名为 people 的表中。5. 创建 Step
在 Spring Batch 中,Step 是一个具体的任务,它包含了一个 ItemReader、一个 ItemProcessor 和一个 ItemWriter。
创建一个 Step 需要实现 Step 接口,并重写 execute 方法。例如,创建一个从文件中读取数据,并将数据写入数据库的 Step:
@Bean
public Step importPersonStep(DataSource dataSource) {return stepBuilderFactory.get("importPersonStep").<Person, Person>chunk(10).reader(personItemReader()).processor((person) -> {person.setLastName(person.getLastName().toUpperCase());return person;}).writer(personItemWriter(dataSource)).build();
}
在上面的代码中,我们创建了一个名为 importPersonStep 的 Step,它包含了一个 personItemReader、一个 ItemProcessor 和一个 personItemWriter。在 ItemProcessor 中,我们将 lastName 转换为大写字母。
6. 运行 Job
在完成了以上步骤之后,我们可以运行 Job 了。在 Spring Boot 中,可以使用 CommandLineRunner 来运行 Job。
@SpringBootApplication
public class Application implements CommandLineRunner {@Autowiredprivate JobLauncher jobLauncher;@Autowiredprivate Job simpleJob;@Autowiredprivate Job importPersonJob;public static void main(String[] args) {SpringApplication.run(Application.class, args);}@Overridepublic void run(String... args) throws Exception {JobParameters jobParameters = new JobParametersBuilder().addDate("date", new Date()).toJobParameters();jobLauncher.run(simpleJob, jobParameters);jobLauncher.run(importPersonJob, jobParameters);}
}
在上面的代码中,我们创建了一个名为 Application 的类,它实现了 CommandLineRunner 接口,并重写了 run 方法。在 run 方法中,我们运行了 simpleJob 和 importPersonJob。
7. 总结
本文介绍了如何使用 Spring Batch 进行批处理任务。首先,我们创建了一个 Job,它包含了一个 Step。然后,我们创建了一个 ItemReader 和一个 ItemWriter,用于读取和写入数据。最后,我们创建了一个 Step,它包含了一个 ItemReader、一个 ItemProcessor 和一个 ItemWriter。通过以上步骤,我们可以使用 Spring Batch 完成大规模数据处理任务。

相关文章:

Spring Batch使用详细例子

Spring Batch 是一个开源的批处理框架&#xff0c;它提供了一种简单的方式来处理大规模的数据处理任务。它基于 Spring 框架&#xff0c;可以与 Spring 的其他组件无缝集成&#xff0c;如 Spring Boot、Spring Data 等。本文将介绍如何使用 Spring Batch 进行批处理任务。 1. 准…...

漏洞预警|Apache Dubbo 存在反序列化漏洞

棱镜七彩安全预警 近日网上有关于开源项目Apache Dubbo 存在反序列化漏洞&#xff0c;棱镜七彩威胁情报团队第一时间探测到&#xff0c;经分析研判&#xff0c;向全社会发起开源漏洞预警公告&#xff0c;提醒相关安全团队及时响应。 项目介绍 Apache Dubbo 是一款 RPC 服务开…...

Tomcat源码分析-spring boot集成tomcat

SPI 在分析源码前&#xff0c;我们先来了解下 spring 的 SPI 机制。我们知道&#xff0c;jdk 为了方便应用程序进行扩展&#xff0c;提供了默认的 SPI 实现&#xff08;ServiceLoader&#xff09;&#xff0c;dubbo 也有自己的 SPI。spring 也是如此&#xff0c;他为我们提供了…...

一个古老的html后台的模板代码

效果图下&#xff1a; css部分代码&#xff1a;/* CSS Document / body{font-family:“宋体”, Arial,Verdana, sans-serif, Helvetica;font-size:12px;margin:0;background:#f4f5eb;color:#000;} dl,ul,li{list-style:none;} a img{border:0;} a{color:#000;} a:link,a:visit…...

支持向量回归删除异常值Python

1、支持向量回归&#xff08;SVR&#xff09;原理 支持向量回归&#xff08;Support Vector Regression&#xff0c;SVR&#xff09;不仅可以用于预测&#xff0c;还可以用于异常值检测。其基本思路是训练一个回归模型&#xff0c;通过对每个数据点进行预测&#xff0c;并计算…...

手把手开发一门程序语言JimLang (2)

根据爱因斯坦的相对论&#xff0c;物体的质量越大&#xff0c;时间过得越快&#xff0c;所以托更对于我的煎熬&#xff0c;远远比你们想象的还要痛苦…今天给大家来盘硬菜&#xff0c;也是前些时日预告过的JimLang的开发过程… Let’s go !!! 语法及解析 JimLang.g4 这里我们…...

DSF深度搜索时到底是如何回溯的(小tip)

这一段让我迷了两次&#xff0c;为什么回溯的时候&#xff0c;恢复了最后一位&#xff0c;往上递归一层之后&#xff0c;把最后一位填在它前一位&#xff0c;但是原本的前一位没有恢复&#xff0c;最后一位要怎么办&#xff1f;其实这还是递归没明白 也就是这一步是如何实现的 …...

Rust Web入门(八):打包发布

本教程笔记来自 杨旭老师的 rust web 全栈教程&#xff0c;链接如下&#xff1a; https://www.bilibili.com/video/BV1RP4y1G7KF?p1&vd_source8595fbbf160cc11a0cc07cadacf22951 学习 Rust Web 需要学习 rust 的前置知识可以学习杨旭老师的另一门教程 https://www.bili…...

synchronize优化偏向锁

偏向锁 轻量级锁在没有竞争时&#xff08;只有自己一个线程&#xff09;&#xff0c;仍然会尝试CAS替换mark word&#xff1b; 会造成一定的性能的损耗&#xff1b; JDK6之中引入了偏向锁进行优化&#xff0c;第一次使用时线程ID注入到Mark word中&#xff0c;之后重入不再进…...

算法习题之动态规划

动态规划习题1 打印n层汉诺塔从最左边移动到最右边的全部过程习题2 给你一个栈&#xff0c;请你逆序这个栈&#xff0c;不能申请额外的数据结构&#xff0c;只能使用递归函数。 如何实现?习题3 打印一个字符串的全部子序列&#xff0c;打印一个字符串的全部子序列&#xff0c;…...

顺序表【数据结构】

文章目录:star2:1. 顺序表概念:star2:2. 框架3. 基本功能3.1 头文件:star:3.2 初始化:star:3.3 扩容:star:3.4 打印:star:3.5 尾插:star:3.6 头插:star:3.7 尾删:star:3.8 头删:star:3.9 指定插入:star:3.10 指定删除:star:3.11 查找:star2:3.12 注意事项4. 顺序表的缺点&#…...

SNAP中根据入射角和干涉图使用波段计算器计算垂直形变--以门源地震为例

SNAP中根据入射角和相干图使用波段计算器计算垂直形变--以门源地震为例0 写在前面1 具体步骤1.1 准备数据1.2 在SNAP中打开波段运算Band Maths1.3 之前计算的水平位移displacement如下图数据的其他处理请参考博文在SNAP中用sentinel-1数据做InSAR测量&#xff0c;以门源地震为例…...

Ubuntu20.04中Docker安装与配置

一、安装 1、卸载可能存在的旧版本 sudo apt-get remove docker docker-engine docker-ce docker.io2、更新apt包索引 sudo apt-get update显示“正在读取软件包列表… 完成” 3、安装以下包以使apt可以通过HTTPS使用存储库(repository) sudo apt-get install -y apt-tran…...

pytorch权值初始化和损失函数

pytorch权值初始化和损失函数 权值初始化 梯度消失与爆炸 针对上面这个两个隐藏层的神经网络&#xff0c;我们求w2的梯度 可以发现&#xff0c;w2的梯度与H1&#xff08;上一层网络的输出&#xff09;有很大的关系&#xff0c;当h1趋近于0时&#xff0c;w2的梯度也趋近于0&am…...

maven将jar文件上传至本地仓库及私服

maven官方仓库有些依赖并不存在&#xff0c;现在项目都是maven直接获取jar&#xff0c;当maven获取不到时&#xff0c;需要我们把jar上传至maven仓库。已 ImpalaJDBC41.jar 文件为例&#xff0c;如&#xff1a;希望上传后&#xff0c;设置的依赖为&#xff1a;<dependency&g…...

前端学习第三阶段-第1、2章 JavaScript 基础语法

01第一章 JavaScript网页编程课前导学 1-1 JavaScript网页编程课前导学 02第二章 JavaScript 基础语法 2-1 计算机基础和Javascript介绍 01-计算机基础导读 02-编程语言 03-计算机基础 04-JavaScript初识导读 05-初始JavaScript 06-浏览器执行JS过程 07-JS三部分组成 08-JS三种…...

hibernate学习(二)

hibernate学习&#xff08;二&#xff09; 一、hibernate常见配置&#xff1a; 1.XML提示问题配置&#xff1a; 二、hibernate映射的配置&#xff1a; &#xff08;1&#xff09;class标签的配置&#xff1a; 标签用来建立类与表之间的映射关系属性&#xff1a; 1.name&…...

平安银行LAMBDA实验室负责人崔孝林:提早拿到下一个计算时代入场券

量子前哨重磅推出独家专题《“量子”百人科学家》&#xff0c;我们将遍访全球探索赋能“量子”场景应用的百位优秀科学专家&#xff0c;从商业视角了解当下各行业领域的“量子”最新研究成果&#xff0c;多角度、多维度、多层面讲述该领域的探索历程&#xff0c;为读者解析商业…...

linux下进不去adb

linux 进不去adb cat /sys/kernel/debug/usb/devices 查看是否有adb口 首先查看adb是否被识别成串口 option 如果被识别成串口 方法1&#xff1a; https://patchwork.kernel.org/project/linux-usb/patch/20180723140220.7166-1-romain.izard.progmail.com/ diff --git a/dri…...

【SPSS】多因素方差分析详细操作教程(附案例实战)

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 方差分析概述 多因素方差分析原理...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...