Spring Batch 批处理-步骤Step与Tasklet

news2025/1/7 6:06:15

引言

接着上篇:Spring Batch 批处理-执行上下文,了解作业执行上下文后,本篇就来了解一下Spring Batch批处理步骤Step对象与任务处理对象Tasklet,看下Spring Batch 如何运作的。

步骤介绍

一般认为步骤是一个独立功能组件,因为它包含了一个工作单元需要的所有内容,比如:输入模块,输出模块,数据处理模块等。这种设计好处在哪?答案是:给开发者带来更自由的操作空间。

目前Spring Batch 支持2种步骤处理模式:

  • 简单具于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代码块。循环执行step逻辑,直到tasklet.execute方法返回RepeatStatus.FINISHED

  • 居于块(chunk)的处理模式

    居于块的步骤一般包含2个或者3个组件:1>ItemReader 2>ItemProcessor(可选) 3>ItemWriter 。 当用上这些组件之后,Spring Batch 会按块处理数据。

简单Tasklet

学到这,我们写过很多简单Tasklet模式步骤,但是都没有深入了解过,这节就细致分析一下具有Tasklet 步骤使用。

先看下Tasklet源码

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

Tasklet 接口有且仅有一个方法:execute,

参数有2个:

StepContribution:步骤信息对象,用于保存当前步骤执行情况信息,核心用法:设置步骤结果状态contribution.setExitStatus(ExitStatus status)

contribution.setExitStatus(ExitStatus.COMPLETED);

ChunkContext:chuck上下文,跟之前学的StepContext JobContext一样,区别是它用于记录chunk块执行场景。通过它可以获取前面2个对象。

返回值1个:

RepeatStatus:当前步骤状态, 它是枚举类,有2个值,一个表示execute方法可以循环执行,一个表示已经执行结束。

public enum RepeatStatus {

	/**
	 * 当前步骤依然可以执行,如果步骤返回该值,会一直循环执行
	 */
	CONTINUABLE(true), 
	/**
	 * 当前步骤结束,可以为成功也可以表示不成,仅代表当前step执行结束了
	 */
	FINISHED(false);
}    

需求:练习上面RepeatStatus状态

@SpringBootApplication
@EnableBatchProcessing
public class SimpleTaskletJob {
    @Autowired
    private JobLauncher jobLauncher;
    @Autowired
    private JobBuilderFactory jobBuilderFactory;
    @Autowired
    private StepBuilderFactory stepBuilderFactory;
    @Bean
    public Tasklet tasklet(){
        return new Tasklet() {
            @Override
            public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
                System.out.println("------>" + System.currentTimeMillis());
                //return RepeatStatus.CONTINUABLE;  //循环执行
                return RepeatStatus.FINISHED;
            }
        };
    }
    @Bean
    public Step step1(){
        return stepBuilderFactory.get("step1")
                .tasklet(tasklet())
                .build();
    }
    //定义作业
    @Bean
    public Job job(){
        return jobBuilderFactory.get("step-simple-tasklet-job")
                .start(step1())
                .build();
    }
    public static void main(String[] args) {
        SpringApplication.run(SimpleTaskletJob.class, args);
    }

}

运行后,return RepeatStatus.FINISHED; 正常打印, return RepeatStatus.CONTINUABLE;会不停循环。

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

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

相关文章

密码学大咖DavidWong历经数年创作编写而成的这本书

从我开始写本书到图书出版已经有几年了。最初,我打算将本书作为介绍现实世界常用密码原语的图书。但是,这显然是一件不可能完成的事情。任何一个领域都不可能用一本书来总 结清楚。出于这个原因,我必须在知识的深度和广度之间找到平衡。我希望…

3.6双端口RAM和多模块存储器

文章目录关键词正文一、存取周期二、引子三、双端口RAM四、多体并行存储器&#xff08;1&#xff09;高位交叉编址方式&#xff08;2&#xff09;低位交叉编址方式&#xff08;3&#xff09;编址&#xff08;4&#xff09;特性举例<1> 高位交叉编址<2> 低位交叉编址…

word实用技巧:拼音指南用法及注意事项

如果你是一位语文老师&#xff0c;在为学生准备试卷时&#xff0c;时常会用到Word拼音指南功能&#xff1b;如果你是一位职场白领&#xff0c;在为领导准备发言稿、颁奖名单时&#xff0c;以防领导读错音&#xff0c;也会用到Word拼音指南功能对生僻字&#xff0c;多音字进行单…

RabbitMQ 获取消息(Ack Mode)

在服务器端的客户端页面从队列中获取消息是一个危险的动作&#xff0c;生产环境一定要了解业务之后再做操作。 Act Mode Nack message requeue true 接收消息但不做确认&#xff0c;消息会重新加入队列 Automatic ack 获取消息&#xff0c;应答确认&#xff0c;消息不…

C#,编程语言的基本概念与知识点

本文归纳整理C#的一些知识点&#xff0c;便于快速浏览与掌握C#语言的一些基本概念。本文并没有很好地层次与组织&#xff0c;抄了不少&#xff0c;写了不少&#xff0c;想到什么&#xff0c;就写什么。01 类 class类是C#等面向对象编程语言&#xff08;Object-oriented program…

分享152个ASP源码,总有一款适合您

ASP源码 分享152个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 152个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1fOOs06p6YghEzceqJ4twaA?pwd0p4z 提取码&#x…

Vue-透传Attributes使用解析

透传是vue中一种特性&#xff0c;官方的解释是&#xff1a;“透传 attribute”指的是传递给一个组件&#xff0c;却没有被该组件声明为 props 或 emits 的 attribute 或者 v-on 事件监听器。最常见的例子就是 class、style 和 id。这句话解释过来就是一些不被prop定义的属性直接…

面对层出不穷的问题,延迟开学的原因就是取消延时服务?

面对层出不穷的问题&#xff0c;延迟开学的原因就是取消延时服务&#xff1f; #延迟开学#请问为什么要延迟&#xff1f;疫情期间说要回家可以理解&#xff0c; 这两天都传着说郑州市的中小学、幼儿园推迟开学了&#xff0c;到底有没有这种情况&#xff1f;我们现在又来到了郑…

零基础入行软件测试怎么学习~

随着近几年软件测试行业的异军突起&#xff0c;加之这又是个进入门槛相对较低的行业&#xff0c;导致不少人都想从事这个岗位。那么&#xff0c;许多初学者在一开始都会想知道&#xff0c;零基础入门软件测试要学什么?希望本文可以对大家的软件测试学习之路有一定的指导意义&a…

Vue实现考勤记录删除-自定义右击删除菜单

一、定义和使用oncontextmenu 事件在元素中用户右击鼠标时触发并打开上下文菜单。注意&#xff1a;所有浏览器都支持 oncontextmenu 事件&#xff0c; contextmenu 元素只有 Firefox 浏览器支持。二、语法HTML 中:<element oncontextmenu"myScript">JavaScript…

RabbitMQ面试题

什么是 MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是 message 而已。 还是一种跨进程的通信机制&#xff0c;用于上下游传递消息。 在互联网架构中&#xff0c;MQ 是一种非常常见的…

一文走进多核架构下的内存模

一、走进多核编程CPU 发展早期阶段&#xff0c;性能的提升主要来自于主频的提升和架构的优化&#xff0c;当这条优化途径出现瓶颈后&#xff0c;多核 CPU 开始流行起来。多核心同时执行任务极大地提高了系统整体性能&#xff0c;但也对硬件架构和软件编写提出了更大的挑战。各个…

C语言#define的用法

#define 叫做宏定义命令&#xff0c;它也是C语言预处理命令的一种。所谓宏定义&#xff0c;就是用一个标识符来表示一个字符串&#xff0c;如果在后面的代码中出现了该标识符&#xff0c;那么就全部替换成指定的字符串。我们先通过一个例子来看一下 #define 的用法&#xff1a;…

【Spring(九)】带你了解Spring整合MyBatis的详细过程

文章目录前言Spring整合mybatis思路分析Spring整合MyBatis总结前言 前面我们已经学习完了Spring的注解开发&#xff0c;接下来我们来学习Spring整合MyBatis&#x1f4aa;&#x1f4aa;。 Spring整合mybatis思路分析 整合其实我们在核心容器中已经完成了一个东西了:DruidDataSou…

Hue使用

文章目录HUE功能概览界面介绍Quick browseApp应用 App* 编辑器 【Editor】调度器 【Scheduler】浏览 Browsers*【Documents】【File Browser】HDFS【Job Browser】YARN、oozie【Table Browser】Hive、mysql、SQLite...【HBase Browser】HbaseHUE 在hue.ini 配置集成其他服务&a…

Doris-1.2.0安装部署详细流程

doris介绍 Doris是一个MPP的OLAP系统&#xff0c;以较低的成本提供在大数据集上的高性能分析和报表查询功能。 MPP (Massively Parallel Processing)&#xff0c;即大规模并行处理。简单来说&#xff0c;MPP是将任务并行的分散到多个服务器和节点上&#xff0c;在每个节点上计…

Power BI中创建父子层级二:父级单独产生值

一、父子层级 在数据分析中&#xff0c;经常会遇到父子层级问题&#xff0c;通常来说&#xff0c;父子层级又可以分为两种情况&#xff0c;一种为图1&#xff0c;江苏中烟的销量就是南京品牌和苏烟品牌的销量之和&#xff0c;南京品牌的销量就是南京&#xff08;硬红&#xff…

cocos开发微信小游戏ci机器人实践

1.cocos使用命令行发布微信小游戏项目 1.1 先编辑微信小游戏构建发布配置&#xff0c;然后导出配置&#xff0c;会生成一个buildConfig_wechatgame.json的配置文件 1.2 使用命令行构建微信小游戏项目 D:\CocosDashboard\resources.editors\Creator\3.4.2\CocosCreator.exe --…

硅烷试剂1873-77-4_Tris(trimethylsilyl)silane_三(三甲基硅基)硅烷

●中文名&#xff1a;三(三甲基硅基)硅烷&#xff0c;三(三甲硅基)硅烷●英文名&#xff1a;TRIS(TRIMETHYLSILYL)SILANE&#xff0c;Tris&#xff08;trimethylsilyl&#xff09;Silane&#xff0c;Tris(trimethylsilyl)silaneTris(trimethylsilyl)silane中含有硅烷基&#xf…

JavaScript 中清空数组的几种方法

目录 Array.prototype.splice() 将 length 设置为 0 分配新的空数组 length 0和 Array [] 之间的差异&#xff1f; JavaScript 中清空数组的几种方法多少人都想走出浪浪山 &#x1f9e8;&#x1f9e8;&#x1f9e8; Array.prototype.splice() let course [HTML, CSS, Java…