Spring Batch源码阅读-基本概念(一)

文档

https://www.docs4dev.com/docs/zh/spring-batch/4.1.x/reference/domain.html#domainLanguageOfBatch

https://www.wenjiangs.com/doc/txqspanos

什么是Spring Batch

大批量处理数据流程往往经过以下步骤:

                       1.从数据源读取数据excel,数据库、csv、txt文件等

                 2.然后经过加工过滤后

                 3.针对加工过滤后数据进行处理(业务逻辑处理、写入数据库 excel、csv、txt等)。

需要面临问题:

        1.异常中断重启恢复

                    2.处理过程中的各种统计如:成功数、失败数等

使用spring batch 用户只需要专注读取数据加工过滤数据和处理业务数据

Spring Batch提供了大量的,可重用的功能,这些功能对大数据处理来说是必不可少的,包括 日志/跟踪(tracing),事务管理, 任务处理(processing)统计,任务重启, 忽略(skip),和资源管理等功能。 此外还提供了许多高级服务和特性, 使之能够通过优化(optimization ) 和分片技术(partitioning techniques)来高效地执行超大型数据集的批处理任务。

Spring Batch结构

 

JobLauncher

job的容器,负责启动job,以及job的元数据管理

job

Step的容器负责调度Step执行,将执行结果反馈给Job

Step

真正的任务处项,一个job可以有多个Step

ItemReader

读取数据,可以是xml、excel、txt、mysql等,spring batch 很多基本的spring batch都有默认实现,具体可以看此接口的实现

ItemProcess

根据itemReader读取的数据做加工和过滤处理如VO互转 如果过滤返回null就行

ItemWrlter

将itemProcess加工的数据做写入操作,可以是xml、excel、txt、mysql等,spring batch 很多基本的spring batch都有默认实现,具体可以看此接口的实现

JobRepository

负责job在启动、调度 、读取、写入过程中信息存储,如执行时间,结果、成功数量 失败数量、等。可以是数据库、redis、h2等 spring batch默认提供的是数据库

看了上图我们真正只需要关心   ItemReader,ItemProcess,ItemWrlter 也就是 读取 加工和 写入,其他都是spring batch调度

spring batch元数据

元数据可以任意一种格式存在,就看jobRepository实现 我这里展示最常用的数据库记录元数据的相关表

BATCH_JOB_INSTANCE   
                         根据参数维度不同参数就是一次job
BATCH_JOB_EXECUTION  
                          BATCH_JOB_INSTANCE 子表(1对多),每次run(失败重试)就是一次 描述了一次执行生命周期各个状态,如:本次执行状态 开始结束时间 如果异常 异常原因
BATCH_JOB_EXECUTION_PARAMS 
                           每次每次执行job(BATCH_JOB_EXECUTION) 的参数
BATCH_JOB_EXECUTION_CONTEXT
                           允许用户保存每次执行Execution的一些状态信息
BATCH_STEP_EXECUTION
                          每次job(BATCH_JOB_EXECUTION)执行可以包含多个step子任务项 这里记录每个子任务执行状态,成功、 失败、读取了多少、跳过多少、回滚多少、成功多少行等
BATCH_STEP_EXECUTION_CONTEXT
                            允许用户保存针对执行Step的一些状态信息
BATCH_JOB_SEQ 
                          BATCH_JOB_INSTANCE自增主键的维护 每次创建(BATCH_JOB_INSTANCE)会回去这个表max(id) +1 作为主键id 同事更新此表
BATCH_JOB_EXECUTION_SEQ
                        BATCH_JOB_EXECUTION自增主键的维护 每次创建(BATCH_JOB_EXECUTION)会回去这个表max(id) +1 作为主键id 同事更新此表
原文地址:https://www.cnblogs.com/LQBlog/p/15429882.html