00、SpringBatch 4.x.x版本:简单入门

00、SpringBatch批处理

  • 一、介绍
    • 1、什么是批处理?
    • 2、官网
    • 3、优势
    • 4、组织架构
    • 5、程序运行架构图
  • 二、入门案例-H2版(内存)
    • 1、新建项目
    • 2、引入依赖
    • 3、新建HelloJob.java
  • 三、入门案例-MySQL版
    • 1、引入依赖
    • 2、修改 application.yml
    • 3、验证
  • 四、案例解析
    • 1、@EnableBatchProcessing
    • 2、配置数据库四要素
    • 2、创建Tasklet对象
    • 3、创建Step对象
    • 4、创建Job并执行Job

在这里插入图片描述

一、介绍

1、什么是批处理?

定义: 将数据分批次进行处理的过程。
例如: 银行对账文件处理、跨系统数据同步等。
常规批处理步骤: 系统A从数据库中导出数据到文件,系统B读取文件数据并写入到数据库。
在这里插入图片描述
批处理特点:

  • 自动执行: 根据系统设定的工作步骤自动完成
  • 数据量大: 少则百万,多则上千万甚至上亿。如果数据量更大则需要只能用大数据了。
  • 定时执行: 例如,每天、每周、每月执行。

2、官网

官网地址: Overview :: Spring Batch
在这里插入图片描述
根据官网总结如下:

  • Sping Batch 是一个轻量级、完善的批处理框架,帮助企业建立健壮、高效的批处理应用。
  • Sping Batch 是一个基于 Spring 框架为基础的开发的框架,是 Spring 的一个子项目。
  • Sping Batch 提供大量可重用的组件。例如:日志,追踪,事务,任务作业统计,任务重启,跳过,重复,资源管理等等。
  • Spring Batch 是一个 批处理应用框架,不提供调度框架 。如果需要定时处理需要额外引入 调度框架 。例如: Quartz

3、优势

    Spring Batch 框架通过提供丰富的 开箱即用的组件高可靠性高扩展性 的能力。使得开发批处理应用的人员专注于业务处理,提高处理应用的开发能力。

  • 丰富的开箱即用组件

  • 面向Chunk的处理

  • 事务管理能力

  • 元数据管理

  • 易监控的批处理应用

  • 丰富的流程定义

  • 健壮的批处理应用

  • 易扩展的批处理应用

  • 复用企业现有的IT代码

4、组织架构

在这里插入图片描述
Application: 应用层。包含所有的批处理作业,程序员自定义代码实现逻辑。

Batch Core: 核心层。包含 Spring Batch 启动控制 所需要的核心类。例如:JobLauncherJobStep 等。

Batch Infrastructure: 基础架构层。提供通用的 服务处理

三层体系使得 Spring Batch 架构可以在不同层面进行扩展,避免影响,实现高内聚低耦合设计。

5、程序运行架构图

在这里插入图片描述
JobLauncher: 作业调度器。作业启动的主要入口。

Job: 作业。需要执行的任务逻辑。

Step: 作业步骤。一个 Job 作业由1个或者多个 Step 组成。完成所有 Step 操作,一个完整 Job 才算执行结束。

ItemReader: Step 步骤执行过程中数据输入。可以从数据源(文件系统、数据库、队列等)中读取 Item (数据记录)

ItemProcessor: Item 数据加工逻辑(输入)。比如:数据清洗、数据转换、数据过滤、数据校验等。

ItemWriter: Step 步骤执行过程中数据输出。将 Item(数据记录) 写入数据源(文件系统、数据库、队列等)。

JobRepository: 保存Job 或者 检索Job 的信息。 Spring Batch 需要 持久化Job(数据库/内存), JobRepository 就是持久化的接口。

二、入门案例-H2版(内存)

需求: 打印一个 hello spring batch! 不带读/写/处理
H2 是一个嵌入式内存数据库

1、新建项目

新建 Spring Boot 项目:springbatch-demo
本次案例使用环境版本:

# Spring Batch 4.x.x通常匹配Spring Boot 2.x.x
jdk 17
Spring Boot 2.6.15
Spring Batch 4.3.8

此步骤省略~

2、引入依赖

<!-- spring batch -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-batch</artifactId>
</dependency><!-- lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency><!-- H2 -->
<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope>
</dependency>

3、新建HelloJob.java

package com.ulanhada.springbatchdemo.hello;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.launch.JobLauncher;
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.context.annotation.Bean;import javax.annotation.Resource;@EnableBatchProcessing
public class HelloJob {// job调度器@Resourceprivate JobLauncher jobLauncher;// job构造器工厂@Resourceprivate JobBuilderFactory jobBuilderFactory;// step构造器工厂@Resourceprivate StepBuilderFactory stepBuilderFactory;// 任务-step执行逻辑由tasklet完成@Beanpublic Tasklet tasklet(){return new Tasklet() {@Overridepublic RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception{System.out.println("Hello SpringBatch....");return RepeatStatus.FINISHED;}};}//作业步骤-不带读/写/处理@Beanpublic Step step1(){return stepBuilderFactory.get("step1").tasklet(tasklet()).build();}//定义作业@Beanpublic Job job(){return jobBuilderFactory.get("helloJob").start(step1()).build();}
}

在这里插入图片描述

三、入门案例-MySQL版

1、引入依赖

        <!-- H2 -->
<!--    <dependency>-->
<!--        <groupId>com.h2database</groupId>-->
<!--        <artifactId>h2</artifactId>-->
<!--        <scope>runtime</scope>-->
<!--    </dependency>--><!-- mysql -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.12</version>
</dependency>

2、修改 application.yml

大家根据实际情况修改~

spring:application:name: springbatch-demodatasource:username: rootpassword: 123456url: jdbc:mysql://192.168.250.128:3306/springbatch?serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=truedriver-class-name: com.mysql.cj.jdbc.Driver# 初始化数据库,文件在依赖jar包中sql:init:schema-locations: classpath:org/springframework/batch/core/schema-mysql.sqlmode: always# mode: never

⚠️注意:
sql.init.model 首次启动为 always , 后面启动需要改为 never ,否则每次执行SQL都会异常。第一次启动会自动执行指定的脚本,后续不需要再初始化。

3、验证

在这里插入图片描述
在这里插入图片描述

四、案例解析

1、@EnableBatchProcessing

批处理启动注解,要求添加在 配置类 或者 启动类 上。
在这里插入图片描述
添加 @EnableBatchProcessing 注解后,SpringBoot 会自动加载JobLauncherJobBuilderFactoryStepBuilderFactory 类并创建对象交给容器管理。使用时,直接 @Resource 即可。
在这里插入图片描述

2、配置数据库四要素

批处理允许重复执行、异常重试,此时需要保存 批处理状态数据Spring Batch 将数据缓存在 H2 内存中或者缓存在指定 数据库 中。入门案例是保存在 MySQL 中,所以需要配置 数据库四要素
在这里插入图片描述

2、创建Tasklet对象

在这里插入图片描述
Tasklet 负责批处理 Step 步骤中具体业务执行。
Tasklet 是一个接口,有且只有一个 execute 方法 ,用于定制 Step 执行逻辑。
在这里插入图片描述
execute() 方法返回值是一个状态枚举类:RepeatStatus,里面有 可继续执行态已经完成态
在这里插入图片描述

3、创建Step对象

在这里插入图片描述
Job作业 执行实际就是 Step步骤 执行。入门案例选用最简单的 Tasklet 模式,后续再介绍 Chunk块处理 模式。

4、创建Job并执行Job

在这里插入图片描述
创建 Job 对象交给容器管理,当 Spring Boot 启动之后,会自动去从容器中加载 Job 对象。并将 Job 对象交给 JobLauncherApplicationRunner 类,再借助 JobLauncher 类实现 Job 执行。


到这里 00、SpringBatch 4.x.x版本:简单入门 就结束了!!!🎉🎉🎉
后续接 01、SpringBatch 4.x.x版本:作业对象 Job 📣📣📣
欢迎小伙伴们学习和指正!!!😊😊😊
祝大家学习和工作一切顺利!!!😎😎😎

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

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

相关文章

华为昇腾asend

昇腾Ascend C编程语言 Ascend C原生支持C/C编程规范&#xff0c;通过多层接口抽象、并行编程范式、孪生调试等技术&#xff0c;极大提高了算子的开发效率&#xff0c;帮助AI 参考文章 手把手教你在昇腾平台上搭建PyTorch训练环境 - 哔哩哔哩 (bilibili.com)https://www.bilibi…

Ubuntu20.04安装MatlabR2018a

一、安装包 安装包下载链接 提取码&#xff1a;kve2 网上相关教程很多&#xff0c;此处仅作为安装软件记录&#xff0c;方便后续软件重装&#xff0c;大家按需取用。 二、安装 1. 相关文件一览 下载并解压文件后&#xff0c;如下图所示&#xff1a; 2. 挂载镜像并安装 2…

【Go】五、流程控制

文章目录 1、if2、switch3、for4、for range5、break6、continue7、goto8、return 1、if 条件表达式左右的()是建议省略的if后面一定要有空格&#xff0c;和条件表达式分隔开来{ }一定不能省略if后面可以并列的加入变量的定义 if count : 20;count < 30 {fmt.Println(&quo…

node.js的常用命令

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

数据结构:单调栈和单调队列

文章目录 一、单调栈1.1、栈的思想1.2、单调栈1.2.1、单调栈的基本应用&#xff1a;找出数组中每个元素右侧第一个更大的元素1.2.2、单调栈的基本应用&#xff1a;找出数组中每个元素左侧第一个更大的元素1.2.3、单调栈拓展1.2.4、单调栈LeetCode题单 二、单调队列2.1、队列的思…

Linux系统中安装一些常用的插件备用

Linux系统中安装一些常用的插件备用 1.安装wget yum -y install wget 2.安装vim yum -y install vim-enhanced 3.更换yum源为国内的阿里云源&#xff08;选择&#xff09; 1、备份CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.…

盘点2024年最佳WordPress外贸主题推荐

WordPress是一个非常受欢迎的建站平台&#xff0c;它具有易用性&#xff0c;并提供了许多功能强大的主题和插件。如果你计划建立一个外贸独立站商城&#xff0c;选择一个适合的WordPress外贸主题至关重要。以下是一些外贸主题应具备的特点&#xff1a; 1. 欧美风格&#xff1a…

计算机网络-UDP协议——沐雨先生

实验内容 1.编写并运行UDP server 2.编写并运行UDP client 3.使用Wireshark抓取并分析UDP用户数据报 基本要求 1.了解UDP上server socket与client socket之间的通信过程 2.学会使用Java语言编写UDP socket服务程序 3.学会使用Java语言编写UDP socket客户程序 4.了解UDP…

【C语言基础】:自定义类型(一)--> 结构体

文章目录 一、内置类型与自定义类型1.1 内置类型&#xff08;基本数据类型&#xff09;1.2 自定义类型 二、结构体2.1 结构体的声明2.2 结构体变量的创建和初始化2.3 结构体的特殊声明2.4 结构体的自引用 三、结构体内存对齐3.1 对齐规则3.2 为什么存在内存对齐3.3 修改默认对齐…

再见 mysql_upgrade

在数据库管理的世界里&#xff0c;随着技术的不断进步和业务的不断发展&#xff0c;数据库的版本升级成为了一个不可避免的过程。 MySQL 作为业界领先的开源关系型数据库管理系统&#xff0c;其版本迭代与功能优化同样不容忽视。 而在这个过程中&#xff0c;升级工具就显得尤为…

如何在 Mac 上打开、编辑、复制、移动或删除存储在 Windows NTFS 格式 USB 驱动器上的文件 Tuxera NTFS for Mac使用教程

当您获得一台新 Mac 时&#xff0c;它只能读取 Windows NTFS 格式的 USB 驱动器。要将文件添加、保存或写入您的 Mac&#xff0c;您需要一个附加的 NTFS 驱动程序。Tuxera 他可以帮忙实现这一功能&#xff01; Tuxera可以轻松转换驱动器&#xff1a;无论使用Windows PC还是Mac&…

Day26 手撕各种集合底层源码(一)

Day26 手撕各种集合底层源码&#xff08;一&#xff09; 一、手撕ArrayList底层源码 1、概念&#xff1a; ArrayList的底层实现是基于数组的动态扩容结构。 2、思路&#xff1a; 1.研究继承关系 2.研究属性 3.理解创建集合的过程 – 构造方法的底层原理 4.研究添加元素的过程…

Typora for Mac/Win:让Markdown编辑更高效,创作更自由

在数字化时代&#xff0c;文本编辑已成为我们日常生活与工作中的重要环节。Markdown作为一种轻量级标记语言&#xff0c;以其简洁、易读、易写的特性&#xff0c;受到了广大用户的喜爱。而Typora&#xff0c;作为一款专为Markdown设计的文本编辑器&#xff0c;更是让Markdown编…

对接中泰极速行情 | DolphinDB XTP 插件使用教程

XTP 是中泰证券推出的高性能交易平台&#xff0c;专为专业投资者提供高速行情及交易系统&#xff0c;旨在提供优质便捷的市场接入通道。目前支持股票、基金、ETF、债券、期权等多个市场&#xff0c;可满足不同投资者需求。 基于 XTP 官方 C SDK&#xff0c;DolphinDB 开发了 X…

【SAP2000】在框架结构中应用分布式面板荷载Applying Distributed Panel Loads to Frame Structures

在框架结构中应用分布式面板荷载 Applying Distributed Panel Loads to Frame Structures 使用"Uniform to Frame"选项,可以简单地将荷载用于更多样化的情况。 With the “Uniform to Frame” option, loads can be easily used for a greater diversity of situat…

2024Web自动化测试的技术框架和工具有哪些?

Web 自动化测试是一种自动化测试方式&#xff0c;旨在模拟人工操作对 Web 应用程序进行测试。这种测试方式可以提高测试效率和测试精度&#xff0c;减少人工测试的工作量和测试成本。在 Web 自动化测试中&#xff0c;技术框架和工具起着至关重要的作用。本文将介绍几种常见的 W…

Fastjson配置消息转换器(时间格式问题)

问题&#xff1a; 我们可以看见&#xff0c;日期的格式有点问题。 由于ArticleListVO类的createTime成员变量是Date类型&#xff0c;默认是由java的Jackson来处理&#xff0c;使用 ISO-8601 规范来处理日期时间格式。ISO-8601 是一种国际标准的日期时间表示法&#xff0c;例如&…

Oracle中实现根据条件对数据的增删改操作——Merge Into

一、需求描述 在我们进行项目开发的过程中&#xff0c;会遇到这样的场景&#xff0c;需要根据某个条件对数据进行增、删、改的操作&#xff1b;遇到这种情况我们有2种方法进行解决&#xff1a; 方法一&#xff1a;①查询指定条件&#xff1b;②根据查询出的指定条件结果在执行…

conda配置完整的pytorch虚拟环境

新建环境 conda create -n py38 python3.8虚拟环境中安装CUDA&#xff0c;conda安装的cudatoolkit和NVIDIA提供的CUDA Toolkit不一样&#xff0c;前者是系统CUDA的子集。在虚拟环境中安装了cudatoolkit&#xff0c;则pytorch就会用虚拟环境中的cudatoolkit进行编译。注意cudato…

Centos安装部署

Centos安装部署 linux安装JDK 下载地址&#xff1a;https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html 创建文件夹&#xff0c;输入命令&#xff1a; mkdir /usr/local/jdk 查看JDK信息&#xff0c;输入命令&#xff1a; java -version 将下载的…