Spring Batch - Architecture

以下是Spring Batch架构的图解表示.如图所示,该体系结构包含三个主要组件,即应用程序,批处理核心批处理基础结构.

Architecture

应用程序 : 该组件包含我们使用Spring Batch框架编写的所有作业和代码.

Batch Core : 此组件包含控制和启动批处理作业所需的所有API类.

批处理基础结构 : 此组件包含应用程序和批处理核心组件使用的读取器,编写器和服务.

Spring Batch的组件

下图显示了Spring Batch的不同组件以及它们如何相互连接.

Components

作业

在Spring Batch应用程序中,作业是要执行的批处理.它从头到尾不间断地运行.此作业进一步分为步骤(或作业包含步骤).

我们将使用XML文件或Java类在Spring Batch中配置作业.以下是Spring Batch中作业的XML配置.

<job id = "jobid"> 
   <step id = "step1" next = "step2"/> 
   <step id = "step2" next = "step3"/> 
   <step id = "step3"/> 
</job>

批量作业在标签< job></job>中配置.它有一个名为 id 的属性.在这些标签中,我们定义了步骤的定义和顺序.

可重新启动 : 通常,当作业正在运行并且我们尝试再次启动时,将其视为重新启动,它将再次启动.为避免这种情况,您需要将可重新启动的值设置为 false ,如下所示.

<job id = "jobid" restartable = "false" >

</job>

步骤

步骤是包含必要工作的独立部分用于定义和执行作业的信息(其部分).

如图中所示,每个步骤由ItemReader,ItemProcessor(可选)和ItemWriter组成. 作业可能包含一个或多个步骤.

读者,作家和处理者

项目阅读器从特定来源将数据读入Spring Batch应用程序,而项目编写器将数据从Spring Batch应用程序写入特定目的地.

项目处理器是一个类,它包含处理读入弹簧批次的数据的处理代码.如果应用程序读取"n"记录,则处理器中的代码将在每条记录上执行.

如果没有给出读者和作者,则 tasklet 充当SpringBatch的处理器.它只处理一个任务.例如,如果我们正在编写一个简单的步骤,我们从MySQL数据库读取数据并处理它并将其写入文件(平面),那么我们的步骤使用 :

  • 从MySQL数据库读取的阅读器.

  • 写入平面文件的编写器.

  • 自定义处理器处理数据我们的愿望.

<job id = "helloWorldJob"> 
   <step id = "step1"> 
      <tasklet> 
         <chunk reader = "mysqlReader" writer = "fileWriter" 
            processor = "CustomitemProcessor" ></chunk> 
      </tasklet> 
   </step> 
</job>

Spring Batch提供了一长串读者作家.使用这些预定义的类,我们可以为它们定义bean.我们将在接下来的章节中更详细地讨论读者作家.

JobRepository

Spring Batch中的作业存储库为JobLauncher,Job和Step实现提供创建,检索,更新和删除(CRUD)操作.我们将在XML文件中定义一个作业存储库,如下所示.

<job-repository id = "jobRepository"/>

id 外,还有一些选项(可选)可用.以下是具有所有选项及其默认值的作业存储库的配置.

<job-repository id = "jobRepository" 
   data-source = "dataSource" 
   transaction-manager = "transactionManager" 
   isolation-level-for-create = "SERIALIZABLE" 
   table-prefix = "BATCH_" 
   max-varchar-length = "1000"/>

内存存储库 : 如果您不想在数据库中保留Spring Batch的域对象,可以配置jobRepository的内存版本,如下所示.

<bean id = "jobRepository" 
   class = "org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean ">
   <property name = "transactionManager" ref = "transactionManager"/>
</bean>

JobLauncher

JobLauncher是一个使用给定参数集来启动Spring Batch作业的接口. SampleJoblauncher 是实现 JobLauncher 接口的类.以下是JobLauncher的配置.

<bean id = "jobLauncher" 
   class = "org.springframework.batch.core.launch.support.SimpleJobLauncher"> 
   <property name = "jobRepository" ref = "jobRepository" /> 
</bean>

JobInstance

JobIinstance 表示作业的逻辑运行;它是在我们开始工作时创建的.每个作业实例由作业名称和运行时传递给它的参数区分.

如果JobInstance执行失败,则可以再次执行相同的JobInstance.因此,每个JobInstance可以有多个作业执行.

JobExecution和StepExecution

JobExecution和StepExecution是作业/步骤执行的表示.它们包含作业/步骤的运行信息,例如开始时间(作业/步骤),结束时间(作业/步骤).