一、 介绍
Spring Batch能够支持简单的、复杂的和大数据量的批处理作业,是一个批处理应用框架,不是调度框架,但需要和调度框架(Quartz, Tivoli, Control-M, Cron等)合作来构建完成批处理任务。整体架构如下:
二、 基本概念
- Job: 作业, 由多个 Step 组成,封装整个批处理操作, 是 Batch 操作的基础单元;
- Job Instance: 作业实例,每次作业执行都会生成一个实例并存放在 JobRepository 中,如果失败,再次执行还是会用同一个作业实例;
- Job Parameters: 作业参数, 不同的 Job 实例是通过 Job 参数来区分的;
- Job Execution: 作业执行器, 负责具体 Job 的执行,每次运行 Job 都会启动一个新的 Job 执行器;
- Job Repository: 作业仓库, 负责储存 Job、Step 执行过程中的状态数据及结果,为 JobLauncher、Job、Step 提供标准的 CRUD 实现;
- Job Launchher: 作业调度器,提供执行 Job 的入口;
- Step: 作业步, Job 的一个执行环节,由多个或者一个 Step 组装成 Job,封装了批处理任务中的一个独立的连续阶段;
- Step Execution: 作业步执行器,负责具体 Step 的执行,每次运行 Step 都会启动一个新的执行器;
- Tasklet: Step 中具体执行逻辑的操作,可以重复执行,可以设置具体的同步、异步操作等;
- Execution Context: 执行上下文。它是一组框架持久化与控制的 key/value 对,能够让开发者在 Step Execution 或 Job Execution 范畴保存需要进行持久化的状态;
- Item: 一条数据记录;
- Chunk: 给定数量 Item 的集合,可以定义对 Chunk 的读操作、处理操作、写操作,提交间隔等,这是 Spring Batch 框架的一个重要特性;
- ItemReader: 从数据源(文件系统、数据库、队列等)中读取 Item,一次读取一条;
- ItemProcessor: 从 Item 写入数据源之前,对数据进行处理(如:数据清洗,数据转换,数据过滤,数据校验等);
- ItemWriter: 将 Item 批量写入数据源(文件系统、数据库、队列等),一次输出一批。
注意:定义 Job 基础设施: 主要配置任务仓库、任务调度器和任务执行中用到的事务管理器。如下:
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean" />
<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="transactionManager" class="org.springframework.batch.support.transaction.ResoourcelessTransactionManager" />
三、 示例
commons-batch.xml (主要配置任务仓库,任务调度器和事务管理器等)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:batch="http://www.springframework.org/schema/batch" xmlns:context="http://www.springframework.org/schema/context" xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://ww