Spring Batch 基本概念和运行示例

news/2024/11/18 1:43:13/

基本概念

Spring Batch是批处理框架。
作业(Job)是状态以及状态之间转换的集合。
作业里包含步骤(Spring Bean),每一个步骤解耦到独立的处理器中,并负责自己的数据,把所需的业务逻辑应用到数据上,然后把数据写入合适的位置。这样提供了灵活性、可维护性、伸缩性、可靠性。
又两类主要步骤:

步骤分类简介常用于
基于Tasklet的步骤相对简单,使用Tasklet实现,在事务范围内重复执行execute方法,直到execute方法让步骤停止初始化、运行存储过程、发送通知等
基于块Chunk的步骤更严格,最多又三个主要部分:ItemRead、ItemProcessor、ItemWriter(条目读写处理器)适于基于条目的处理(item-based procssing)

批处理作业的接口

接口说明
org.springframework.batch.core.job作业,ApplicationContext里配置
org.springframework.batch.core.step配置的步骤
org.springframework.batch.core.step.tasklet策略接口,提供了在一次事务范围内执行逻辑的能力
org.springframework.batch.item.ItemReader<T>策略接口,提供步骤的输入
org.springframework.batch.item.ItemProcessor<I,O>业务逻辑、验证等应用于单个条目
org.springframework.batch.item.ItemWriter<T>策略接口,提供步骤的持久化

JobRepository是架构主要共享部分,负责维护作业的状态、各种处理指标,如开始时间、结束时间、状态、读写次数等,通常由RDB数据库支持。
JobLauncher组件负责作业的执行,调用execute方法,验证重启作业是否有效,决定如何执行作业(当前线程、线程池),验证参数等,与具体实现无关,开箱即用。
JobInstance是Spring Batch作业的一次逻辑执行,可由作业名称、逻辑执行提供的唯一参数集来标识。每次执行,不一定有JobInstance,除非执行标识变了。
JobExecution代表作业的一次物理执行,每次执行都会有新的JobExecution。
StepExecution是步骤的一次物理执行,一个JobExecution可以有多个StepExecution。

并行化

并行化有5种方式

方式说明
多线程的步骤作业被配置为以块来处理工作,每个块被封装在自己的事务中。
并行地执行步骤两个步骤之间没有任何关系
异步的ItemProcesser/ItemWriterAsychonousItemProcessor作为修饰器,返回Future,最后Future列表传给AsynchonousItemWriter
远程分块跨JVM处理,主节点与远程工作者保持通信,工作者处理条目的自主写入还是发给主节点写入。JobRepository对分布式状态一无所知。
远程分取不需要持久通信,每个工作者自包含,使用相同配置。

运行示例

先用Spring Initializr生成代码框架:
1
修改HelloWorldApplication.java文件:

package com.xiaolong.helloworld;import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;@EnableBatchProcessing  // 启动批处理基础设施
@SpringBootApplication  // 启动自动配置,结合了@ComponentScan和@EnableAutoConfiguration的元注解
public class HelloWorldApplication {@Autowired  // 作业构建器private JobBuilderFactory jobBuilderFactory;@Autowired  // 步骤构建器private StepBuilderFactory stepBuilderFactory;@Beanpublic Step step() {return this.stepBuilderFactory.get("step1").tasklet(new Tasklet() {  // 内联方式实现tasklet@Overridepublic RepeatStatus execute(StepContribution contribution,ChunkContext chunkContext) throws Exception {System.out.println("Hello, World!");return RepeatStatus.FINISHED;}}).build();}@Beanpublic Job job() {return this.jobBuilderFactory.get("job").start(step()).build();}public static void main(String[] args) {SpringApplication.run(HelloWorldApplication.class, args);}}

代码主要分三部分:@EnableBatchProcessing注解、JobBuilderFactory注入、StepBuilderFactory注入。
@EnableBatchProcessing注解用来启动批处理的基础设施,大部分基础设施由Spring Bean定义,不必再提供,其中包括:
JobRepository:记录作业运行时状态。
JobLauncher:启动作业。
JobExplorer:使用JobRegistry执行制度操作。
JobRegistry:在使用特定的启动器实现时找到作业
PlatformTransactionManager:在工作过程中处理事务。
JobBuilderFactory:作业构建器。
StepBuilderFactory:步骤构建器。

运行结果:
1

参考

https://docs.spring.io/spring-batch/docs/current/api/


http://www.ppmy.cn/news/18734.html

相关文章

AlmaLinux 9 安装Kasm Workspaces

今天尝试一下AlmaLinux 9 安装Kasm Workspaces。 前提条件 安装了Docker和Docker Compose&#xff0c;已经最新版本要求&#xff0c; docker 18.06 docker compose 2.1.1 创建一个Swap分区 下面的步骤将创建一个2千兆字节&#xff08;2048MB&#xff09;的交换分区。请根据…

【Linux】Linux下的调试器-gdb的使用

目录1.debug和release拓展2.如何使用gdb调试3.指令集我们平常调试C/C代码大多实在Windows平台下的VS中&#xff0c;在LInux中&#xff0c;我们通常使用gdb来调试代码&#xff0c;虽然我们很少在LInux上对代码进行调试&#xff0c;gdb在实际的使用中用的较少&#xff0c;但我们必…

第23章_Tomcat和JavaEE入门

一、JavaEE简介什么是JavaEEJavaEE&#xff08;Java Enterprise Edition&#xff09;&#xff0c;Java企业版&#xff0c;是一个用于企业级web开发平台。最早由Sun公司定制并发布&#xff0c;后由Oracle负责维护。JavaEE平台规范了在开发企业级web应用中的技术标准.在JavaEE平台…

树状数组的原理和区间和

目录 一、前言 二、树状数组的原理 1、杂论 2、从二叉树到树状数组 3、神奇的 lowbit(x) 操作 4、tree[ ]数组&#xff1a;将一维信息转换为树形信息存储 5、基于 tree[ ] 的计算 6、tree[]的更新&#xff08;要加lowbit&#xff09; 三、树状数组的应用 1、单点修改…

学人工智能电脑主机八大件配置选择指南

来源&#xff1a;深度之眼 作者&#xff1a;frank 编辑&#xff1a;学姐 本篇主要是帮助大家构建高性能、高性价比的AI开发的硬件平台。如何不把钱浪费到不必要的硬件上&#xff0c;并合理搭配硬件配置节省预算是本文想要去讨论的问题。如果预算充足&#xff0c;笔者建议购买一…

【计算机网络】HTTP/HTTPS

HTTP网络协议 虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一 理解网络协议 协议是一种 “约定”. socket api的接口, 在读写数据时, 都是按 “字符…

英语学习打卡day1

2023.1.19 重点单词 1.speculation n.推测&#xff0c;投机 speculate v. speculative adj. spectate v.看 spectator inspect 检查&#xff08;往里看&#xff09; aspect 外观&#xff08;看一眼&#xff09; prospect 前景 2.literally adv.(强调事实可能令人惊讶)真正…

学习wifi操作模块simplewifi的基本用法

之前学习Python的过程中学过基于pywifi模块操作wifi连接的用法&#xff0c;在dotnet中&#xff0c;SimpleWifi也支持类似的功能。SimpleWifi是C#语言编写的在Windows系统中管理wifi连接的库&#xff0c;它抽象并封装了Managed Wifi API中的wifi操作相关函数&#xff0c;更易于使…