Spring Batch - 架构
以下是 Spring Batch 架构的图解表示。 如图所示,该架构包含三个主要组件,即Application、Batch Core和Batch Infrastructure。
Application − 该组件包含我们使用 Spring Batch 框架编写的所有作业和代码。
Batch Core − 该组件包含控制和启动批处理作业所需的所有 API 类。
Batch Infrastructure − 该组件包含应用程序和 Batch 核心组件使用的读取器、写入器和服务。
Spring Batch 的组件
下图展示了 Spring Batch 的不同组件以及它们如何相互连接。
Job - 作业
在 Spring Batch 应用程序中,作业是要执行的批处理过程。 它从头到尾不间断地运行。 该作业进一步分为步骤(或作业包含步骤)。
我们将使用 XML 文件或 Java 类在 Spring Batch 中配置作业。 以下是 Spring Batch 中 Job 的 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 是作业的独立部分,其中包含定义和执行作业(其部分)所需的信息。
如图所示,每个 step 步骤由 ItemReader、ItemProcessor(可选)和 ItemWriter 组成。 作业可能包含一个或多个步骤。
Readers, Writers, 和 Processors
item reader 从特定源将数据读入 Spring Batch 应用程序,而 item writer 将 Spring Batch 应用程序中的数据写入特定目标。
Item processor 是一个包含处理代码的类,该处理代码处理读取到 spring 批处理中的数据。 如果应用程序读取 "n" 条记录,那么处理器中的代码将在每条记录上执行。
当没有给出 reader 和 writer 时,tasklet 充当 SpringBatch 的处理器。 它只处理一个任务。例如,如果我们正在编写一个包含一个简单步骤的作业,我们从 MySQL 数据库中读取数据并对其进行处理并将其写入文件(平面),那么我们的步骤使用 −
从 MySQL 数据库读取的 reader。
写入平面文件的 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 中的 Job 存储库为 JobLauncher、Job 和 Step 实现提供了 Create、Retrieve、Update 和 Delete (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
一个 JobInstance 代表一个作业的逻辑运行; 它是在我们运行作业时创建的。 每个作业实例由作业名称和运行时传递给它的参数来区分。
如果 JobInstance 执行失败,可以再次执行相同的 JobInstance。 因此,每个 JobInstance 可以有多个作业执行。
JobExecution 和 StepExecution
JobExecution 和 StepExecution 是作业/步骤执行的表示。 它们包含作业/步骤的运行信息,例如(作业/步骤的)开始时间,(作业/步骤的)结束时间。