前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Batch 小任务(Tasklet)步骤

Spring Batch 小任务(Tasklet)步骤

作者头像
HoneyMoose
发布于 2020-02-21 03:41:33
发布于 2020-02-21 03:41:33
9530
举报
文章被收录于专栏:CWIKIUSCWIKIUS

Chunk-Oriented Processing不是处理 step 的唯一方法。

考虑下面的一个场景,如果你仅仅需要调用一个存储过程,你可以在 ItemReader 中实现这个调用,然后在存储过程完成调用后返回 null。这种设计看起来不是那么自然也不是非常优美,因为你的批量设计中甚至都不需要实现 ItemWriter。针对这种情况,Spring Batch 为你提供了 TaskletStep 选项。

TaskletStep 是一个简单的接口,这个接口只需要实现一个方法execute,这个方法将会被TaskletStep多次重复的调用,直到这个方法返回 RepeatStatus.FINISHED 或者抛出异常来表示调用失败。

Tasklet 的每一次调用都会包含在事务中(Transaction)。Tasklet 的实现(implementors)可以调用一个存储过程,一个脚本或者一个简单的 SQL 更新脚本。

针对我们的实践中,我们可以使用 Tasklet 来执行一个 FTP 的任务。

将我们产生的中间文件上传到不同的 FTP 服务器上,你可以在实现中指定不同的服务器配置参数,这样更加有利于代码的重用。

为了能够创建一个 TaskletStep,Bean 需要传递一个 tasklet 方法到构造器(builder),这个 tasklet 方法需要实现 Tasklet 接口。

当你构建 TaskletStep 的时候不要调用 chunk

下面的示例代码显示了一个在 Step build 中构建一个简单的 tasklet。

@Bean public Step step1() {      return this .stepBuilderFactory.get( "step1" )                  .tasklet(myTasklet())                  .build(); }

如果你的 tasklet 实现了 StepListener  接口的话,TaskletStep 将会自动将 tasklet 注册成为一个 StepListener

TaskletAdapter

ItemReader ItemWriter 接口的 adapters一样。Tasklet  接口包含的实现也允许能够通过已经存在的类使用 TaskletAdapter 来将自己进行注册。

例如,你希望使用一个已经存在的 DAO 来更新记录集上的标记的时候,你可以使用 TaskletAdapter 来进行实现。

使用 TaskletAdapter  能够让你的 DAO 可以被 Spring Batch 的 TaskletStep 调用而不需要让你的 DAO 都实现 Tasklet 的接口。

如下面的示例代码:

@Bean public MethodInvokingTaskletAdapter myTasklet() {      MethodInvokingTaskletAdapter adapter = new MethodInvokingTaskletAdapter();        adapter.setTargetObject(fooDao());      adapter.setTargetMethod( "updateFoo" );        return adapter; }

Tasklet 实现(Implementation)示例

在主批量作业开始之前,可能需要很多其他的批量作业必须完成,这样以便于主批量作业能够获得必要的资源和在完成后释放资源或者进行清理。

例如我们遇到下面的使用场景,一个批量作业需要大量的对文件进行交互和使用,通常来说需要在文件被上传到其他服务器上后删除本地产生的临时文件。

下面的示例就是一个 Tasklet 的实现,这个Tasklet 的实现能够完成上面的交互要求(文件来自 Spring Batch samples project 示例程序)。

public class FileDeletingTasklet implements Tasklet, InitializingBean {        private Resource directory;        public RepeatStatus execute(StepContribution contribution,                                  ChunkContext chunkContext) throws Exception {          File dir = directory.getFile();          Assert.state(dir.isDirectory());            File[] files = dir.listFiles();          for ( int i = 0 ; i < files.length; i++) {              boolean deleted = files[i].delete();              if (!deleted) {                  throw new UnexpectedJobExecutionException( "Could not delete file " +                                                            files[i].getPath());              }          }          return RepeatStatus.FINISHED;      }        public void setDirectoryResource(Resource directory) {          this .directory = directory;      }        public void afterPropertiesSet() throws Exception {          Assert.notNull(directory, "directory must be set" );      } }

Tasklet 处理程序实现了将给定目录中的所有文件进行删除。我们应该通知 execute  方法,这个 Tasklet 应该只被执行一次。

所有相关执行的操作需要在 Step 中进行设置,请参考下面有关这个 Tasklet 的设置:

Java 配置

@Bean public Job taskletJob() {      return this .jobBuilderFactory.get( "taskletJob" )                  .start(deleteFilesInDir())                  .build(); }   @Bean public Step deleteFilesInDir() {      return this .stepBuilderFactory.get( "deleteFilesInDir" )                  .tasklet(fileDeletingTasklet())                  .build(); }   @Bean public FileDeletingTasklet fileDeletingTasklet() {      FileDeletingTasklet tasklet = new FileDeletingTasklet();        tasklet.setDirectoryResource( new FileSystemResource( "target/test-outputs/test-dir" ));        return tasklet; }

https://www.cwiki.us/display/SpringBatchZH/TaskletStep

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Cloud Task查看任务状态示例
我们将演示如何使用上述方法查看任务状态和信息。我们将创建一个简单的Spring Cloud Task应用程序,该应用程序将读取一个文件并输出其内容。我们将使用命令行方式启动任务,并使用Actuator端点和任务执行监听器来跟踪任务的状态和信息。
堕落飞鸟
2023/04/17
3900
Spring Batch 配置方式-注解配置
除了XML配置和Java配置外,Spring Batch还支持使用注解来配置Job和Step。使用注解配置可以更加简洁和易于理解。下面是一个使用注解配置的示例:
堕落飞鸟
2023/04/16
6880
Spring Batch(3)——Step控制
批处理任务的主要业务逻辑都是在Step中去完成的。可以将Job理解为运行Step的框架,而Step理解为业务功能。
随风溜达的向日葵
2019/07/08
6.5K1
Spring Batch(3)——Step控制
Spring Batch 批处理(2) - 搭建及运行
private JobBuilderFactory jobBuilderFactory;
chenchenchen
2020/05/26
8150
Spring Batch 批处理(3) - Job、Flow、Split
在成功创建一个job后,Spring Batch 默认在项目启动时候执行配置的job。往往在正常业务处理中,需要我们手动或者定时去触发job,所以这边便引入了jobLauncher、jobOperator两个执行器。
chenchenchen
2020/05/26
1.8K0
Spring Batch实战(一)
虽然开源软件项目和相关社区把更多的注意力集中在基于web和微服务的体系结构框架上,但明显缺乏对可重用体系结构框架的关注,以适应基于java的批处理需求,尽管仍然需要在企业IT环境中处理此类处理。缺乏标准的、可重用的批处理体系结构导致了在客户企业IT功能中开发的许多一次性的内部解决方案的激增。
xdd
2022/07/12
1.7K0
Spring Batch实战(一)
SpringBatch文档
Spring Batch 是一个轻量级的、完善的批处理框架,旨在帮助企业建立健壮、高效的批处理应用。
全栈程序员站长
2022/09/01
5.4K0
Spring Batch 批处理(8) - JobLauncher和JobOperator
在成功创建一个job后,Spring Batch 默认在项目启动时候执行配置的job。往往在正常业务处理中,需要我们手动或者定时去触发job,所以这边便引入了jobLauncher、jobOperator两个执行器。
chenchenchen
2020/05/26
3.5K0
Spring Batch多步骤任务、并行执行、任务决策器、任务嵌套
企业中经常会有需要批处理才能完成的业务操作,比如:自动化地处理大批量复杂的数据,如月结计算;重复性地处理大批量数据,如费率计算;充当内部系统和外部系统的数据纽带,中间需要对数据进行格式化,校验,转换处理等。
鱼找水需要时间
2023/02/16
3.3K0
Spring Batch多步骤任务、并行执行、任务决策器、任务嵌套
springbatch+mysql
1.必须导入的依赖。因为spirngbatch必须配置数据源dataSource所有引入了数据库的相关jar包
全栈程序员站长
2022/09/01
6660
Spring Cloud Task 高级特性Task Batch Jobs
Spring Cloud Task是一个轻量级的框架,用于在Spring Boot应用程序中运行短期任务。它提供了一种简单的方式来管理和监控这些任务,同时还可以与Spring Batch集成,以支持批量处理任务。在本文中,我们将重点介绍Spring Cloud Task的高级特性之一:Task Batch Jobs。
堕落飞鸟
2023/04/17
6500
Spring Batch实战(三)
今天这篇文章,我们来了解一下SpringBatch的ItemReaders、ItemWriters、ItemStream以及怎么注册一个Step。前一篇文章我分析了一下怎么去从database中load数据使用ItemReader的一个子类JdbcPageQueryProvider,今天就进一步分析一下读取数据库数据源时的两个关键类ItemReader和ItemStream,以及写入数据库时的ItemWriter。
xdd
2022/07/12
1.4K0
Spring Batch实战(三)
Spring Batch:处理大数据和批量任务的解决方案
在当今数字化时代,处理大数据和批量任务变得越来越常见。本文将深入研究Spring Batch的原理、用法和最佳实践,帮助你高效地处理大规模数据处理任务。
猫头虎
2024/04/09
5760
Spring Batch 核心概念Step示例
首先,我们需要创建一个用来存储数据的表,这里我们创建一个名为“person”的表,包含id、name和age三个字段:
堕落飞鸟
2023/04/16
3050
【Spring底层原理高级进阶】Spring Batch清洗和转换数据,一键处理繁杂数据!Spring Batch是如何实现IO流优化的?本文详解!
批处理是企业级业务系统不可或缺的一部分,spring batch是一个轻量级的综合性批处理框架,可用于开发企业信息系统中那些至关重要的数据批量处理业务.SpringBatch基于POJO和Spring框架,相当容易上手使用,让开发者很容易地访问和利用企业级服务.spring batch具有高可扩展性的框架,简单的批处理,复杂的大数据批处理作业都可以通过SpringBatch框架来实现。
苏泽
2024/03/10
7790
【Spring底层原理高级进阶】Spring Batch清洗和转换数据,一键处理繁杂数据!Spring Batch是如何实现IO流优化的?本文详解!
Spring Cloud 任务简介
Spring Cloud Task 的目标是为 Spring Boot 应用程序提供创建短期微服务的功能。
jack.yang
2025/04/05
440
Spring 官方批处理框架真香!Spring 全家桶永远滴神!
假期余额严重不足,难受呀!今天早上 8 点半出门坐车,晚上 9 点才到家,差不多坐了一天车才到家,屁股都坐疼了......
Guide哥
2021/10/11
7530
Spring Batch 轻量级批处理框架实践
6、创建任务完成的监听 JobCompletionNotificationListener
二哥聊运营工具
2021/12/17
3450
Spring Batch 轻量级批处理框架实践
Spring Batch 核心概念ItemWriter
Spring Batch是一个非常流行的批处理框架,它提供了许多可重用的组件来支持批处理应用程序的开发。其中一个核心组件就是ItemWriter,它是用于处理批处理结果的组件之一。
堕落飞鸟
2023/04/16
4420
Spring Batch 批处理(4) - ItemReader
2.在这个接口中只有一个方法read(),它读取一个数据并且移动到下一个数据上去,在读取结束时必须返回一个null,否则表明数据没有读取完毕;
chenchenchen
2020/05/26
1.1K0
推荐阅读
相关推荐
Spring Cloud Task查看任务状态示例
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档