Spring Batch - 架构


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

架构

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

批处理核心 - 此组件包含控制和启动批处理作业所需的所有API类。

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

Spring Batch的组件

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

组件

Job

在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 的属性。在这些标签中,我们定义了步骤的定义和顺序。

Restartable - 通常,当一个作业正在运行时,我们尝试再次启动它,这被认为是 restart ,它将再次启动。为避免这种情况,您需要将 restartable 值设置为 false ,如下所示。

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

</job>

Step

Step 是其中包含必要的信息以定义并执行作业(其一部分)的作业的一个独立部分。

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

Readers, Writers和Processors

一个 item reader 数据读入来自特定源的一个Spring批量应用,而一个 item writer 从Spring批处理应用到特定目的地写入数据。

一个 Item processor 是包含其处理读入弹簧批次的数据的处理代码的类。如果应用程序读取 “n” 条记录,则处理器中的代码将在每条记录上执行。

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

  • 一个 reader 从MySQL数据库中读取。

  • 一个 writer ,其写入到一个平面文件。

  • 一个 custom processor ,按照我们的愿望处理数据。

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

Spring Batch提供了很多 readerswriters 。使用这些预定义的类,我们可以为它们定义bean。我们将在接下来的章节中更详细地讨论 readerswriters

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是作业/步骤执行的表示。它们包含作业/步骤的运行信息,例如开始时间(作业/步骤),结束时间(作业/步骤)。