`

说说SpringBatch的领域概念

 
阅读更多
谈到Spring Batch,会谈到很多的领域概念,Job, Step,JobLauncher,JobRepository,JobExecution,Chunk,Tasklet等等,这些概念一窝蜂的涌过来,让开发者非常容易迷失其中,本文的目的就是理顺一下这些领域概念,把所有这些概念逻辑的联系起来。

首先,看一下Spring Batch官方文档中Spring Batch的架构图:

这个架构图非常简单,传递了SpringBatch中最重要的几个领域概念:
  • JobLauncher: 顾名思义,该领域对象就是Job的启动器,其作用就是绑定一组JobParameters到Job上,然后运行该Job。
  • Job: 定义,配置批处理任务的领域对象,该对象的作用,第一是做Step的容器,配置该批处理任务需要的Step,以及他们之间的逻辑关系。第二是配置该批处理任务的特征,比方说名字,是否可重启,是否对JobParameters进行验证以及验证规则等。
  • Step: 定义批处理任务中一个对立的逻辑任务处理单元。基本上的业务逻辑处理代码都是封装在Step中的。Step有2种实现形式,一种是Tasklet形式的,这种形式非常自由,开发人员只需要实现Tasklet接口,其中的逻辑完全有自己决定,另一种是Chunk-Oriented形式的,这种形式定义了一个Step的流程必须是“读-处理(可选)-写”,当然Spring Batch也对每一个步骤提供了接口ItemReader, ItemProcessor,ItemWriter还有很多常用的默认实现(读文件,读数据库,写文件,写数据库等等)。 每一个Step只能由一个Tasklet或者一个Chunk构成。
  • JobRepository: 该领域对象会为Spring Batch的运维数据提供一种持久化机制。其为所有的运维数据的提供CRUD的操作接口,并为所有的操作提供事务支持。


上面这些,都是我们在定义一个Batch Job时会直接涉及到的领域概念,但是,其实JobRepository持久化的并不是Job,Step对象本身,在Batch Job运行时,Job,Step都会创建出自己的一些领域对象以保障Batch Job的运行,支持重启动,跳过等等特性。 这就涉及到更多其他的领域概念:

  • JobInstance:该领域概念和Job的关系与Java中实例和类的关系一样,Job定义了一个工作流程, JobInstance就是该工作流程的一个具体实例。一个Job可以有多个JobInstance, 多个JobInstance之间的区分就要靠另外一个领域概念JobParameters了。
  • JobParameters:是一组可以贯穿整个Job的运行时配置参数。不同的配置将产生不同的JobInstance,如果你是使用相同的JobParameters运行同一个Job, 那么这次运行会重用上一次创建的JobInstance。另外,Spring Batch还非常贴心的提供了让JobParameters中的部分参数不参与JobInstance区分的功能。
  • JobExecution: 该领域概念表示JobInstance的一次运行,JobInstance运行时可能会成功或者失败。每一次JobInstance的运行都会产生一个JobExecution。同一个JobInstance(JobParameters相同)可以多次运行,这样该JobInstance将对应多个Jobexecution。JobExecution记录了一个JobInstance在一次运行时的发生的所有事情,因此,一个JobExecution需要包含很多的属性,并且需要持久化,这样才能很好的支撑Restart等Spring Batch特性。其包含的属性有:
  • StepExecution: 类似于JobExecution,该领域对象表示Step的一次运行。Step是Job的一部分,因此一个StepExecution会关联到一个Jobexecution。另外,该对象还会存储很多与该次Ste运行相关的所有数据,因此该对象也有很多的属性,并且需要持久化以支持一些Spring Batch的特性。这些特性包括:
  • ExecutionContext: 从前面的JobExecution,StepExecution的属性介绍中已经提到了该领域概念。说穿了,该领域概念就是一个容器,该容器由Batch框架控制,框架会对该容器持久化,开发人员可以使用该容器保存一些数据,以支持在整个BatchJob或者整个Step中共享这些数据


经过上面的所有介绍,可以通过一个简单的Spring Batch工作过程来更清晰了解各个领域概念在整个Batch Job中的位置和作用。

首先,开发者定义Batch Job, 定义的过程,需要清楚的配置Job,Step。

然后,配置JobLauncher,即指定该Job的基本运行方式,一个JobLaucher需要指定JobRepository(如何持久化Batch框架的领域对象),Executor(使用单线程的还是多线程的,同步的还是异步的Executor)。

接着,使用JobLaucher启动Job,启动Job的时候,同时会附上本次Job运行的参数JobParameters。Job启动时,会首先去查找是否已存在相同JobParameters的JobInstance,没有就创建一个新的JobInstance,有的话就重用该JobInstance,确认JobInstance之后,会为该JobInstance创建一个JobExecution,该JobExecution会顺带创建一个JobExecutionContext用于在Job执行过程中保存一些数据。然后,把创建的JobExecution对象附着在Job的运行过程中。该步骤中涉及的领域对象JobParameters,JobInstance,JobExecution,JobExecutionContext都会通过JobRepository提供的DAO持久化。

最后,运行Job,该过程就是按照Job定义的Step顺序一步一步的执行的Step,每执行一个Step,就会创建一个StepExecution,同样的StepExecution会顺带创建一个StepExecutionContext保存Step执行过程中的一些数据。该步骤涉及的StepExecution,StepExecutionContext也会通过JobRepository提供的DAO持久化。

这就是一个简单的Batch Job的整个运行过程。
接下来看一下,Spring Batch中的运维数据表,前面提到很多的领域对象都需要持久化,代表的持久化方式就是存储到数据库表中。了解这些持久化的领域对象,对于开发者了解Job在运行过程出现的问题,会有很大帮助,同时还能强化大家对各个领域概念之间关系的理解。Spring Batch中的运维数据表及它们之间的关系如下图:



需要注意的是,JobRepository只负责领域对象的CRUD操作,但是并不负责上面说的数据库表的创建,因此,在启动Job前必须自己创建好这些表,SpringBatch中提供了创建这些数据库表的SQL脚本,可以通过schema-(数据库).sql,找到这些脚本,简单修改一下就可以用了。
  • 大小: 191.7 KB
分享到:
评论

相关推荐

    Spring Batch in Action英文pdf版

    知识点一:Spring Batch的核心概念 Spring Batch框架以处理大量记录和复杂业务逻辑为核心。它提供了一套丰富的特性来处理任务执行、数据读取和写入、事务管理等批处理常见的复杂性。Spring Batch通过批次作业(Batch...

    SpringBatch+Spring+Mybatis+MySql (spring batch 使用jar)

    Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供...

    Spring Boot整合Spring Batch,实现批处理

    在Java开发领域,Spring Boot和Spring Batch的整合是构建高效批处理系统的一种常见方式。Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,...

    基于Spring Batch的大数据量并行处理

    - **领域模型**:Spring Batch定义了一系列核心领域概念,如Job(作业)、Step(步骤)、Chunk(块)、Reader(读取器)、Processor(处理器)和Writer(写入器),这些概念构成了处理数据流的基本单元。 - **应用...

    springbatch 详解PDF附加 全书源码 压缩包

    通过阅读《Spring.Batch批处理框架.pdf》和源码,你将能够掌握 Spring Batch 的核心概念和实践技巧,为你的企业级应用开发带来高效、可靠的批量处理能力。同时,源码可以直接运行,提供了动手实践的机会,加深理解和...

    Spring Batch批处理框架

    Spring Batch是一个开源的轻量级批处理框架,它提供了一整套可复用的组件,用于构建健壮且高效的批处理应用程序。由于信息给定的【部分内容】并没有提供实际的技术细节,因此我将基于Spring Batch框架本身,详细介绍...

    quartz整合springbatch动态集群定时实现mysql参考

    Quartz和Spring Batch是两种非常重要的Java开源框架,它们在企业级应用开发中扮演着重要角色。Quartz主要用于任务调度,而Spring Batch则专注于批量处理。在这个“quartz_springbatch_dynamic”项目中,我们将看到...

    Spring Batch API(Spring Batch 开发文档).CHM

    Spring Batch API(Spring Batch 开发文档).CHM。 官网 Spring Batch API,Spring Batch 开发文档

    Spring batch in action

    本书的第二部分深入探讨了Spring Batch的核心概念,包括如何配置批处理作业、运行作业、读取和写入数据、处理数据以及实现可靠的作业。第三部分进一步深入到高级话题,涵盖执行处理、企业集成、监控、扩展以及批量...

    The Definitive Guide to Spring Batch, 2nd Edition.epub

    Work with all aspects of batch processing in a modern Java environment using a selection of Spring frameworks. This book provides up-to-date examples using the latest configuration techniques based on...

    springBoot+springBatch批量处理数据demo

    SpringBoot和SpringBatch是两个非常重要的Java开发框架,它们在企业级应用开发中扮演着重要角色。...通过深入理解这些概念和实践,开发者能够更好地利用SpringBoot和SpringBatch进行大数据处理任务。

    [原创]Spring Batch 示例程序

    在给定的"Spring Batch 示例程序"中,我们可以深入探讨这个框架的核心概念和在实际应用中的使用方式。该示例程序采用的是Spring 3作为基础框架,以及Spring Batch 2.2.7版本,这两个组件都是Spring生态系统的重要...

    Spring Batch in Action

    书中详细介绍了Spring Batch的核心概念,包括: - **Job**:代表一个完整的批处理作业,它可以包含多个步骤(Step)。 - **Step**:是Job中的一个阶段,通常负责读取输入数据、处理数据以及写入输出数据。 - **...

    spring Batch实现数据库大数据量读写

    Spring Batch 是一个强大的、可扩展的Java框架,专门用于处理批量数据处理任务,包括大量数据库数据的读取、处理和写入。它被设计为在企业级应用中处理大规模、高吞吐量的工作负载。本篇文章将深入探讨如何利用...

    Spring Batch In Action

    #### 知识点二:Spring Batch 的主要概念 - **Job**:在 Spring Batch 中,一个 Job 表示一个完整的批处理任务,它可以包含多个步骤(Steps)。 - **Step**:Step 是 Job 的组成部分之一,代表了一个具体的处理过程...

    Spring Batch 参考文档中文版

    Spring Batch架构包括了Job和Step两个核心概念。Job是批处理作业的总体抽象,而Step是构成Job的一个或多个独立的作业步骤。在Spring Batch中,Step是构建批处理作业的主要方式,它通过读取数据、处理数据和写入数据...

    详细spring batch资料

    在本文中,我们将深入探讨Spring Batch的基本概念、核心组件以及如何在实际项目中应用它。 1. **基本概念** - **作业(Job)**:在Spring Batch中,作业是执行批处理任务的顶级概念。它由一系列步骤组成,可以有...

    SpringBatch-DataMigration SpringBatch数据迁移项目

    mybatis、springBatch、mysql、quartz、spring、springMVC 部署说明: 本项目为两个数据库,由一个数据库的表向另外一个数据库的表做数据迁移,其中数据库脚本在:/src/main/resources/sql/下面(其中data_rep中的表...

    pro spring batch 源码

    Spring Batch 是一个强大的开源批处理框架,用于处理大量数据,尤其在企业级应用中广泛应用。它为批量处理任务提供了全面的解决方案,包括读取、处理和写入数据,以及事务管理、错误处理和作业调度。"Pro Spring ...

    spring batch指南

    1. **作业(Job)**:Spring Batch的核心概念,代表一个完整的批处理任务,可以由一个或多个步骤(Steps)组成。 2. **步骤(Step)**:作业的执行单元,每个步骤中包含读取(Read)、处理(Process)和写入(Write...

Global site tag (gtag.js) - Google Analytics