Spring Batch 简明教程
Spring Batch - Architecture
以下是 Spring Batch 架构的示意图。如此图所示,此架构包含三个主要组件,即 Application, Batch Core 和 Batch Infrastructure 。
Application − 此组件包含我们使用 Spring Batch 框架编写的全部作业和代码。
Batch Core − 此组件包含控制和启动批处理作业所需的所有 API 类。
Batch Infrastructure − 此组件包含应用程序和批处理核心组件使用的读取器、编写器和服务。
Components of Spring Batch
下图显示了 Spring Batch 的不同组件以及它们如何相互连接。
Job
在 Spring Batch 应用程序中,作业是要执行的批处理。它从开始到结束连续运行。此作业进一步细分为步骤(或作业包含步骤)。
我们将在 Spring Batch 中使用 XML 文件或 Java 类配置作业。以下是 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 组成。 A job may contain one or more steps 。
Readers, Writers, and Processors
一个 item reader 从特定来源读取数据到一个 Spring Batch应用程序中,而 item writer 将数据从 Spring Batch 应用程序写入到特定目的地中。
一个 Item processor 是一个包含处理从 Spring Batch 读入数据的处理器代码的类。如果应用程序读取 "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 提供了一个 readers 和 writers 的长列表。使用这些预定义的类,我们能够为它们定义 Bean。我们将在以后的章节中详细讨论 readers 和 writers 。
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"/>
In-Memory Repository − 如果您不想在数据库中保留 Spring Batch 的域对象,您可以按照以下所示配置 jobRepository 的内存版本。
<bean id = "jobRepository"
class = "org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean ">
<property name = "transactionManager" ref = "transactionManager"/>
</bean>
JobLauncher
JobLauncher 是一个使用 given set of parameters 启动 Spring Batch 作业的接口。 SampleJoblauncher 是实现 JobLauncher 接口的类。以下是 JobLauncher 的配置。
<bean id = "jobLauncher"
class = "org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name = "jobRepository" ref = "jobRepository" />
</bean>