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.mzph.cn/news/780742.shtml

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

相关文章

国产桌面操作系统统一身份认证及2FA双因子认证安全升级方案

某金融运营服务公司&#xff0c;主要负责业务处理、客户服务、业务监控、报表统计等金融运营服务&#xff0c;为集团下设二级单位&#xff0c;坐落于一线城市&#xff0c;对政策风向有很高的敏锐度。 该公司已为公司业务人员、客户服务、监督员等配备了数百台国产桌面操作系统…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之七 简单图像浮雕效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之七 简单图像浮雕效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之七 简单图像浮雕效果 一、简单介绍 二、简单图像浮雕效果实现原理 三、简单图像浮雕效果案例实现简单步骤 四、注…

网络七层模型之会话层:理解网络通信的架构(五)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【豫都故郡·领航新篇】Springer独立出版 |第二届先进无人飞行系统国际会议(ICAUAS 2024)

会议简介 Brief Introduction 2024年第二届先进无人飞行系统国际会议(ICAUAS 2024) 会议时间&#xff1a;2024年6月14日-16日 召开地点&#xff1a;中国南昌 大会官网&#xff1a;ICAUAS 2024-2024 2nd International Conference on Advanced Unmanned Aerial Systems2024 2nd …

【C++】力扣-415-字符串相加(双指针,图例详解!!!)

目录 一、前言 二、字符串相加 三、共勉 一、前言 最近春招已经开始&#xff0c;看周围的同学都在投递一些大厂的实习&#xff0c;某为的手撕代码 --- 字符串相乘&#xff0c;某讯的手撕代码 --- 字符串相减等。 于是专门去 Leetcode 上搜索了一下&#xff0c;发现这类题目是面…

conda使用记录

linux 使用conda创建新一个新的python环境过程 conda create -n recommendation_env python3.8.18 # 指定python版本 conda env list # 查看所有的环境 conda activate recommendation_env # 激活创建的新环境 pip install flask # 安装依赖 或者 pip install flask版本号 或者…

脑机交互,屏幕是必须?No!让机器人发出激光光点实现脑机接口交互

一般说来&#xff0c;传统脑机接口(BCI)系统的交互过程依靠一个图形化的用户界面&#xff0c;不利于设备的便携性。而一种无屏幕的BCI可以通过让机器人在外界环境中发出刺激从而实现更直接的命令其中机器人使用激光光点凸显环境中的候选对象&#xff0c;而用户的目标则从脑电图…

跳跃游戏-java

题目描述: 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 解题思想: …

AIGC新潮流!手势灵动数字人视频、百变模特服装图、3D模型纹理一键生成

1、营销应用:AI生成生成带手势(手部动作)的数字人视频 (1)一个基于扩散模型的数字人生成框架,专注于生成具有全身动作的主播风格视频。该系统通过仅需一分钟的个人视频片段进行训练,便能自动生成具有精确躯干和手部动作的主播风格视频。 (2)定位:该框架定位于解决现…

docker环境配置过程中的常见问题

1、pull镜像问题 docker pull jenkins/jenkins:lts Using default tag: latest Trying to pull repository docker.io/library/centos ... Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scoperepository%3Alibr…

自动驾驶-如何进行多传感器的融合

自动驾驶-如何进行多传感器的融合 附赠自动驾驶学习资料和量产经验&#xff1a;链接 引言 自动驾驶中主要使用的感知传感器是摄像头和激光雷达&#xff0c;这两种模态的数据都可以进行目标检测和语义分割并用于自动驾驶中&#xff0c;但是如果只使用单一的传感器进行上述工作…

数据处理库Pandas数据结构DataFrame

Dataframe是一种二维数据结构&#xff0c;数据以表格形式&#xff08;与Excel类似&#xff09;存储&#xff0c;有对应的行和列&#xff0c;如图3-3所示。它的每列可以是不同的值类型&#xff08;不像 ndarray 只能有一个 dtype&#xff09;。基本上可以把 DataFrame 看成是共享…

【机器学习之---数学】熵和交叉熵

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 熵和交叉熵 1. 熵 概率分布的熵可以被解释为与给定分布中的随机变量相关的不确定性或缺乏可预测性的度量。 我们还可以使用熵来定义数据源的信息内容。…

小程序UI设计规范,界面设计尺寸详解

作为互联网技术的重要组成部分&#xff0c;小程序在日常生活中发挥着越来越重要的作用。因此&#xff0c;了解和严格遵守小程序的 UI 设计标准非常重要&#xff0c;它不仅可以帮助我们在保证良好用户体验的同时优化小程序&#xff0c;还可以使我们的产品在竞争激烈的市场中占据…

零基础入门转录组数据分析——绘制差异火山图

零基础入门转录组数据分析——绘制差异火山图 差异分析的火山图(Volcano Plot)在生物信息学数据分析中,特别是在基因表达差异分析中,是一个非常直观和有用的工具。 本教程将从导入的数据结构开始,一步步带大家在R中绘制好看的火山图,最后对火山图进行解读,确保读者理解…

数字范围按位与

题目链接 数字范围按位与 题目描述 注意点 0 < left < right < 2^31 - 1包含 left 、right 端点 解答思路 返回区间内所有数字按位与的结果&#xff0c;所以区间内所有数字在某一位的值相同&#xff0c;则结果该位数字为该值&#xff0c;否则该位数字为0&#xf…

二、Java语法基础

1、Java语言的关键字、标识符及命名规范 1)java关键字 2)标识符 3)JAVA中的命名规范 包名的命名规范:域名.公司名称.项目名称.模块名称 类的命名规范:首字母大写,第二个单词的首字母大写,以此类推。 2、进制间的转换(二进制、十进制) 1)十进制->二进制 采用…

火狐浏览器垂直标签页对比 Sidebery vs Tab Center Reborn

Sidebery 链接 商店 评价 大而全&#xff0c;各种功能&#xff0c;以及相关的配置项&#xff0c;应有尽有&#xff1b;功能包括但不限于&#xff1a; 树形标签页、着色、面板、容器、快照最近关闭、标签页、历史 默认的配置就已经很好用了&#xff1b; 快捷键&#xff1a;F…

2024年安全员-C证证模拟考试题库及安全员-C证理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年安全员-C证证模拟考试题库及安全员-C证理论考试试题是由安全生产模拟考试一点通提供&#xff0c;安全员-C证证模拟考试题库是根据安全员-C证最新版教材&#xff0c;安全员-C证大纲整理而成&#xff08;含2024年…

TSINGSEE青犀多模型、算力调度与智能分析AI算法中台介绍及应用

TSINGSEE青犀AI算法中台是一款平台型产品&#xff0c;专注于提供各行业中小场景中部署解决方案。平台具备接入广、性能强、支持跨平台、芯片国产化等特点&#xff0c;可提供丰富的视图接入能力和智能分析能力。平台将不同类型、不同协议前端设备&#xff0c;支持通过不同网络环…