Spring Batch 批处理入门案例解析

news2024/11/19 10:24:39

引言

书接上篇 Spring Batch 批处理入门案例 ,上篇带小伙伴们写了一个Spring Batch 入门案例,里面有哪些注意要点呢?本篇一起来分析分析~

案例解析

整个入门案例核心点有5个,一一来讲解一下

@EnableBatchProcessing

批处理启动注解,要求贴配置类或者启动类上

@SpringBootApplication
@EnableBatchProcessing
public class HelloJob {
    ...
}

贴上@EnableBatchProcessing注解后,SpringBoot会自动加载JobLauncher JobBuilderFactory StepBuilderFactory 类并创建对象交给容器管理,要使用时,直接@Autowired即可

//job调度器
@Autowired
private JobLauncher jobLauncher;
//job构造器工厂
@Autowired
private JobBuilderFactory jobBuilderFactory;
//step构造器工厂
@Autowired
private StepBuilderFactory stepBuilderFactory;

配置数据库四要素

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

创建Tasklet对象

//任务-step执行逻辑由tasklet完成
@Bean
public Tasklet tasklet(){
    return new Tasklet() {
        @Override
        public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
            System.out.println("Hello SpringBatch....");
            return RepeatStatus.FINISHED;
        }
    };
}

Tasklet负责批处理step步骤中具体业务执行,它是一个接口,有且只有一个execute方法,用于定制step执行逻辑。

public interface Tasklet {
	RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception;
}

execute方法返回值是一个状态枚举类:RepeatStatus,里面有可继续执行态与已经完成态

public enum RepeatStatus {
	/**
	 * 可继续执行的-tasklet返回这个状态会进入死循环
	 */
	CONTINUABLE(true), 
	/**
	 * 已经完成态
	 */
	FINISHED(false);
    ....
}

创建Step对象

//作业步骤-不带读/写/处理
@Bean
public Step step1(){
    return stepBuilderFactory.get("step1")
        .tasklet(tasklet())
        .build();
}

Job作业执行靠Step步骤执行,入门案例选用最简单的Tasklet模式,后续再讲Chunk块处理模式。

创建Job并执行Job

//定义作业
@Bean
public Job job(){
    return jobBuilderFactory.get("hello-job")
        .start(step1())
        .build();
}

创建Job对象交给容器管理,当springboot启动之后,会自动去从容器中加载Job对象,并将Job对象交给JobLauncherApplicationRunner类,再借助JobLauncher类实现job执行。

验证过程:

打断点,debug模式启动

点击下一步,进入

SpringApplication类run方法  

 再进进入run方法

JobLauncherApplicationRunner类

 

 再进入一步

JobLauncher接口--实现类:SimpleJobLauncher

 到这,Spring Batch 入门案例分析就结束~

 

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

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

相关文章

AD8226组成的高精度放大电路之一

工业设备中常常需要用到高速、高精度的模拟前端方案,而其中控制系统中的信号电平通常为以下几类之一:单端电流(4 mA 至 20 mA)、单端差分电压(0 V 至 5V、0 V 至10 V、5 V、10 V)或者来自热电偶或称重传感器等传感器的小信号输入。大共模电压摆幅也非常典型,尤其是小信号…

Spring Cloud Zuul过滤器介绍及使用(传递数据、拦截请求和异常处理)

在教程《Zuul网关的介绍及使用》中一开始就介绍过,Zuul 可以实现很多高级的功能,比如限流、认证等。想要实现这些功能,必须要基于 Zuul 给我们提供的核心组件“过滤器”。下面我们一起来了解一下 Zuul 的过滤器。 过滤器类型 Zuul 中的过滤…

问题来了,拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗?

今天,聊一个有趣的问题:拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗? 可能有的同学会说,网线都被拔掉了,那说明物理层被断开了,那在上层的传输层理应也会断开,所以原…

MarkDown 项目中如何引入开源MarkDown? 史上最简单教程

目录 一、少不了的东西 editor.md ① 下载链接 ② 将其引入到自己的项目中 引入依赖 二、代码部分 一些小细节 1. 编辑页 2. 展示页 一、少不了的东西 如果想要在一个页面中使用MarkDown ,那么你首先就要引入MarkDown editor.md ① 下载链接 GitHub下…

Flutter和Rust如何优雅的交互

前言 文章的图片链接都是在github上,可能需要...你懂得;本文含有大量关键步骤配置图片,强烈建议在合适环境下阅读 Flutter直接调用C层还是蛮有魅力,想想你练习C,然后直接能用flutter在上层展示出效果,是不…

【中级ECharts技术】transform进行数据转换和dataZoom在项目中的使用(可视化非常的强劲)

transform 进行数据转换 数据转换是这样一个公式:outData=f(inputData)。F是转换方法,例如filter、sort、region、boxplot、cluster、aggregate(todo)等。有了数据转换功能,我们至少可以做到以下几点: 将数据分成多个部分,并在不同的饼图中显示它们。 执行一些数据统计…

C++ 注释

📒博客主页: ​​开心档博客主页​​ 🎉欢迎关注🔎点赞👍收藏⭐留言📝 📌本文由开心档原创! 📆51CTO首发时间:🌴2022年12月12日🌴 ✉…

Httpd服务进阶知识-HTTP协议详解

一.WEB开发概述 1>.C/S编程 CS即客户端、服务器编程。 客户端、服务端之间需要使用Socket,约定协议、版本(往往使用的协议是TCP或者UDP),指定地址和端口,就可以通信了。客户端、服务端传输数据,数据可以有一定的格式&#xff…

Go开发中配置一个Logger日志的功能实现(结合zap日志库)

为什么需要Logger 一般在开发项目的时候我们都是需要一个存储日志的文件,因为在部署项目以后,我们只能通过去筛查日志进行检索问题,这时候日志是否可以呈现清晰这个对于我们进行排查工作是十分重要的,所以Logger能否展示出我们最…

基于PHP的中华诗歌网的设计与实现

目 录 Abstract 2 目 录 3 1 绪论 5 1.1 研究背景 5 1.2诗歌鉴赏网站的意义 5 1.3网站开发的设计思想 5 2 系统相关技术 7 2.1 MySQL数据库介绍 7 2.2 PHP技术介绍 8 3 系统需求分析 10 3.1 系统需求分析 10 3.2系统可行性分析 10 3.3 系统用例分析 11 4 系统的详细设计 12 4.1…

QT 短时间大量图片传输,实现监控效果 (实时视屏传输) (暴力模式)

1.首先需要知道的知识 1.我使用的是 TCP 协议传输 ,因为传输数据准确一点, 2. 然后是 套接字的 信号 , readyRead( ) ,这个信号的功能是只要套接字里面的 缓存区有数据,他就会发出这个信号。 3.我们传输数据有时候,会出现 粘…

[附源码]计算机毕业设计公共台账管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

基于intel+fpga平台实现设备AI 和数据转换智能化

通过 AI 和数据转换实现智能设备数字化 数据收集、可视化、自动控制和 AI 分析有效促进了设备智能化 (M2I) 和工业 AI的螺丝,是推动智能制造向前发展的两个齿轮。通过"设备智能化 "和"工业AI"赋能智能设备功能&#xff…

Kafka如何实现延迟队列?

Kafka并没有使⽤JDK⾃带的Timer或者DelayQueue来实现延迟的功能,⽽是基于时间轮自定义了⼀个⽤于实现延迟功能的定时器(SystemTimer)。JDK的Timer和DelayQueue插⼊和删除操作的平均时间复杂度为O(nlog(n)),并不能满⾜Kafka的⾼性能…

centOS配置ss5并解决部分出现的问题

文章目录代理服务器socks5协议搭建ss5代理服务器安装ss5修改配置文件添加用户名和密码修改ss5端口修改ss5启动权限启动ss5服务配置socks全局使用qq验证参考代理服务器 实际的工作的有时候需要用到代理服务器,通过代理服务器可以一定程度上隐藏自己的真实IP&#xf…

聚焦 | 千海金与大工科技园“喜结连理” 正式达成战略合作

为贯彻国家碳达峰碳中和相关工作要求,加快实施可再生能源替代行动,推动可再生能源加快步入高质量跃升发展新阶段。12月9日,由千海金集团、大连理工大学科技园联合成立的低碳科技与绿色金融研究中心举行揭牌仪式。 大连市西岗区科工贸副局长李…

nacos--基础--1.3--理论--架构

nacos–基础–1.3–理论–架构 1、基本架构及概念 1.1、服务 (Service) 是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)。Nacos 支持主流的服务生态,举例如下 Kuber…

[2022-12-11]神经网络与深度学习 hw12 - 小作业

contentshw12 - 不知道该起个什么名字task1题目内容题目分析题目解答题目总结task2题目内容题目分析题目解答题目总结task3题目内容题目分析题目解答题目总结写在最后hw12 - 不知道该起个什么名字 task1 题目内容 在小批量梯度下降中,尝试分析为什么学习率要和批…

苦卷28天,P9大佬给我的Alibaba面试手册!终于成功踹开字节大门

怎么说呢,今年真的是寒气逼人啊!在这个大环境下,裁员已经不算是特别的事情,粗暴裁员也许是未来一种趋势…在职的卷的起飞,离职的找不到好工作。 做点能做的:跑跑步骑骑车多锻炼;当当上面正版书…

[附源码]Python计算机毕业设计大学生心理健康管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…