Architecture
以下是Spring Batch架构的图解表示。 如图所示,该体系结构包含三个主要组件,即Application, Batch Core和Batch Infrastructure 。
Application - 该组件包含我们使用Spring Batch框架编写的所有作业和代码。
Batch Core - 此组件包含控制和启动批处理作业所需的所有API类。
Batch Infrastructure - 此组件包含应用程序和批处理核心组件使用的读取器,编写器和服务。
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>标记内配置批处理作业。 它有一个名为id的属性。 在这些标签中,我们定义了步骤的定义和顺序。
Restartable - 通常,当作业正在运行时,我们尝试再次启动它,这被视为restart ,它将再次启动。 为避免这种情况,您需要将restartable值设置为false ,如下所示。
<job id = "jobid" restartable = "false" >
</job>
Step
step是作业的独立部分,包含定义和执行作业(其部分)所需的信息。
如图中所示,每个步骤由ItemReader,ItemProcessor(可选)和ItemWriter组成。 A job may contain one or more steps 。
读者,作家和处理者
item reader从特定源将数据读入Spring Batch应用程序,而item writer编写器将数据从Spring Batch应用程序写入特定目标。
Item processor是一个包含处理代码的类,该处理代码处理读入弹簧批处理的数据。 如果应用程序读取"n"条记录,则处理器中的代码将在每条记录上执行。
当没有给出读写器时, tasklet充当SpringBatch的处理器。 它只处理一个任务。 例如,如果我们正在编写一个简单的步骤,我们从MySQL数据库读取数据并处理它并将其写入文件(平面),那么我们的步骤使用 -
从MySQL数据库读取的读取reader 。
写入平面文件的编写器。
一个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>
JobInstance
JobIinstance表示作业的逻辑运行; 它是在我们开始工作时创建的。 每个作业实例由作业名称和运行时传递给它的参数区分。
如果JobInstance执行失败,则可以再次执行相同的JobInstance。 因此,每个JobInstance可以有多个作业执行。
JobExecution和StepExecution
JobExecution和StepExecution是作业/步骤执行的表示。 它们包含作业/步骤的运行信息,例如开始时间(作业/步骤),结束时间(作业/步骤)。