背景:清结算批处理模块使用的技术栈spring
资料:数据库
spring batch是spring提供的一个数据处理框架。企业域中的许多应用程序须要批量处理才能在关键任务环境中执行业务操做。 这些业务运营包括:多线程
无需用户交互便可最有效地处理大量信息的自动化,复杂处理。 这些操做一般包括基于时间的事件(例如月末计算,通知或通讯)。在很是大的数据集中重复处理复杂业务规则的按期应用(例如,保险利益肯定或费率调整)。集成从内部和外部系统接收的信息,这些信息一般须要以事务方式格式化,验证和处理到记录系统中。 批处理用于天天为企业处理数十亿的交易。框架
- 框架能力
二、领域概念模型
对于扩展性,框架提供的扩展能力包括以下的四种模式 :分布式
Multithreaded Step 多线程执行一个Step;spa
Parallel Step 经过多线程并行执行多个Step;线程
Remote Chunking 在远端节点上执行分布式Chunk操做;接口
Partitioning Step 对数据进行分区,并分开执行;队列
ItemReader:事件
包括FlatFileItemReader文本数据读取、StaxEventItemReader XML文件数据读取、JsonItemReader JSON文件数据读取、JdbcPagingItemReader数据库分页数据读取等实现
ItemWriter:
包括FlatFileItemWriter文本数据输出、StaxEventItemWriter XML文件数据输出、JsonItemWriter JSON文件数据输出、JdbcBatchItemWriter数据库数据插入等实现
监听器 |
具体说明 |
JobExecutionListener |
在Job开始以前(beforeJob)和以后(aflerJob)触发 |
StepExecutionListener |
在Step开始以前(beforeStep)和以后(afterStep)触发 |
ChunkListener |
在 Chunk 开始以前(beforeChunk),以后(afterChunk)和错误后(afterChunkError)触发 |
ItemReadListener |
在 Read 开始以前(beforeRead>,以后(afterRead)和错误后(onReadError)触发 |
ItemProcessListener |
在 Processor 开始以前(beforeProcess),以后(afterProcess)和错误后(onProcessError)触发 |
ItemWriterListener |
在 Writer 开始以前(beforeWrite),以后(afterWrite)和错误后(onWriteError)触发 |
实现方式 :
实现JobExecutionListener 接口
注解方式 @BeforeStep @AfterStep
异常处理:
Spring Batch处理任务过程当中若是发生了异常,默认机制是立刻中止任务执行,抛出相应异常,若是任务还包含未执行的步骤也不会被执行。要改变这个默认规则,咱们能够配置异常重试和异常跳过机制。异常跳过:遇到异常的时候不但愿结束任务,而是跳过这个异常,继续执行;异常重试:遇到异常的时候通过指定次数的重试,若是仍是失败的话,才会中止任务。除了这两个特性外,本文也会记录一些别的特性。
.faultTolerant() // 配置错误容忍
.retry(MyJobExecutionException.class) // 配置重试的异常类型
retryLimit(3) // 重试3次,三次事后仍是异常的话,则任务会结束
.faultTolerant() // 配置错误容忍
.skip(MyJobExecutionException.class) // 配置跳过的异常类型
.skipLimit(1) // 最多跳过1次,1次事后仍是异常的话,则任务会结束
事务问题:
一次Setp分为Reader、Processor和Writer三个阶段,这些阶段统称为Item。默认状况下若是错误不是发生在Reader阶段,那么不必再去从新读取一次数据。可是某些场景下须要Reader部分也须要从新执行,好比Reader是从一个JMS队列中消费消息,当发生回滚的时候消息也会在队列上重放,所以也要将Reader归入到回滚的事物中,根据这个场景可使用readerIsTransactionalQueue()来配置数据重读:
咱们还能够在Step中手动配置事务属性,事物的属性包括隔离等级(isolation)、传播方式(propagation)以及过时时间(timeout)等:
三、元数据表
BATCH_JOB_INSTANCE |
做业实例表。用于存放Job的实例信息。 |
BATCH_JOB_EXECUTION |
做业执行器表。用于存放当前做业的执行信息,好比建立时间。执行开始时间,执行结束时间,执行的哪一个Job实例,执行状态等。 |
BATCH_JOB_EXECUTION_PARAMS |
做业参数表。用于存放每一个Job执行时候的参数信息,该参数其实是对应Job实例的。 |
BATCH_STEP_EXECUTION |
做业步执行器表。用于存放每一个Step执行器的信息,好比做业步的开始时间、执行完成时间、执行状态、读/写次数、跳过次数等。 |
BATCH_STEP_EXECUTION_CONTEXT |
做业步执行上下文表。用于存放每一个做业步的上下文信息。 |
BATCH_JOB_EXECUTION_CONTEXT |
做业执行上下文表。用于存放做业执行器上下文的信息。 |
BATCH_STEP_EXECUTION_SEQ |
做业步序列表。用于给表BATCH_STEP_EXECUTION和BATCH_STEP_EXECUTION_CONTEXT提供主键。 |
BATCH_JOB_EXECUTION_SEQ |
做业执行器序列表。用于给表BATCH_JOB_EXECUTION和BATCH_JOB_EXECUTION_CONTEXT提供主键。 |
BATCH_JOB_SEQ |
做业序列表。用于给表BATCH_JOB_INSTANCE和BATCH_JOB_EXECUTION_PARAMS提供主键。 |