Spring Batch - 架构


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

建筑学

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

Batch Core - 该组件包含控制和启动批处理作业所需的所有 API 类。

Batch 基础设施- 该组件包含应用程序和 Batch 核心组件使用的读取器、写入器和服务。

Spring Batch 的组件

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

成分

工作

在 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 应用程序写入特定目标。

Item处理器是一个类,其中包含处理读入 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。我们将在接下来的章节中更详细地讨论读者作者。

作业库

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 是一个接口,它使用给定的参数集启动 Spring Batch 作业。SampleJoblauncher是实现JobLauncher接口的类。以下是 JobLauncher 的配置。

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

作业实例

JobInstance代表作业的逻辑运行它是在我们运行作业时创建的。每个作业实例通过作业名称和运行时传递给它的参数来区分。

如果某个JobInstance执行失败,可以再次执行同一个JobInstance。因此,每个 JobInstance 可以有多个作业执行。

作业执行和步骤执行

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