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 是一个开源的批处理框架,它提供了一种简单的方式来处理大规模的数据处理任务。它基于 Spring 框架,可以与 Spring 的其他组件无缝集成,如 Spring Boot、Spring Data 等。本文将介绍如何使用 Spring Batch 进行批处理任务。 1. 准…...
漏洞预警|Apache Dubbo 存在反序列化漏洞
棱镜七彩安全预警 近日网上有关于开源项目Apache Dubbo 存在反序列化漏洞,棱镜七彩威胁情报团队第一时间探测到,经分析研判,向全社会发起开源漏洞预警公告,提醒相关安全团队及时响应。 项目介绍 Apache Dubbo 是一款 RPC 服务开…...
Tomcat源码分析-spring boot集成tomcat
SPI 在分析源码前,我们先来了解下 spring 的 SPI 机制。我们知道,jdk 为了方便应用程序进行扩展,提供了默认的 SPI 实现(ServiceLoader),dubbo 也有自己的 SPI。spring 也是如此,他为我们提供了…...
一个古老的html后台的模板代码
效果图下: css部分代码:/* 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、支持向量回归(SVR)原理 支持向量回归(Support Vector Regression,SVR)不仅可以用于预测,还可以用于异常值检测。其基本思路是训练一个回归模型,通过对每个数据点进行预测,并计算…...
手把手开发一门程序语言JimLang (2)
根据爱因斯坦的相对论,物体的质量越大,时间过得越快,所以托更对于我的煎熬,远远比你们想象的还要痛苦…今天给大家来盘硬菜,也是前些时日预告过的JimLang的开发过程… Let’s go !!! 语法及解析 JimLang.g4 这里我们…...
DSF深度搜索时到底是如何回溯的(小tip)
这一段让我迷了两次,为什么回溯的时候,恢复了最后一位,往上递归一层之后,把最后一位填在它前一位,但是原本的前一位没有恢复,最后一位要怎么办?其实这还是递归没明白 也就是这一步是如何实现的 …...
Rust Web入门(八):打包发布
本教程笔记来自 杨旭老师的 rust web 全栈教程,链接如下: https://www.bilibili.com/video/BV1RP4y1G7KF?p1&vd_source8595fbbf160cc11a0cc07cadacf22951 学习 Rust Web 需要学习 rust 的前置知识可以学习杨旭老师的另一门教程 https://www.bili…...
synchronize优化偏向锁
偏向锁 轻量级锁在没有竞争时(只有自己一个线程),仍然会尝试CAS替换mark word; 会造成一定的性能的损耗; JDK6之中引入了偏向锁进行优化,第一次使用时线程ID注入到Mark word中,之后重入不再进…...
算法习题之动态规划
动态规划习题1 打印n层汉诺塔从最左边移动到最右边的全部过程习题2 给你一个栈,请你逆序这个栈,不能申请额外的数据结构,只能使用递归函数。 如何实现?习题3 打印一个字符串的全部子序列,打印一个字符串的全部子序列,…...
顺序表【数据结构】
文章目录: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测量,以门源地震为例…...
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权值初始化和损失函数 权值初始化 梯度消失与爆炸 针对上面这个两个隐藏层的神经网络,我们求w2的梯度 可以发现,w2的梯度与H1(上一层网络的输出)有很大的关系,当h1趋近于0时,w2的梯度也趋近于0&am…...
maven将jar文件上传至本地仓库及私服
maven官方仓库有些依赖并不存在,现在项目都是maven直接获取jar,当maven获取不到时,需要我们把jar上传至maven仓库。已 ImpalaJDBC41.jar 文件为例,如:希望上传后,设置的依赖为:<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学习(二) 一、hibernate常见配置: 1.XML提示问题配置: 二、hibernate映射的配置: (1)class标签的配置: 标签用来建立类与表之间的映射关系属性: 1.name&…...
平安银行LAMBDA实验室负责人崔孝林:提早拿到下一个计算时代入场券
量子前哨重磅推出独家专题《“量子”百人科学家》,我们将遍访全球探索赋能“量子”场景应用的百位优秀科学专家,从商业视角了解当下各行业领域的“量子”最新研究成果,多角度、多维度、多层面讲述该领域的探索历程,为读者解析商业…...
linux下进不去adb
linux 进不去adb cat /sys/kernel/debug/usb/devices 查看是否有adb口 首先查看adb是否被识别成串口 option 如果被识别成串口 方法1: https://patchwork.kernel.org/project/linux-usb/patch/20180723140220.7166-1-romain.izard.progmail.com/ diff --git a/dri…...
【SPSS】多因素方差分析详细操作教程(附案例实战)
🤵♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 方差分析概述 多因素方差分析原理...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 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的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 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(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
