『埃尔法哥哥』一文搞懂大数据批量处理框架Spring Batch的完美解析方案是什么( 三 )
本文插图
在一个Job中配置多个Step 。 不同的Step间可以顺序执行 , 也可以按照不同的条件有选择的执行(条件通常使用Step的退出状态决定) , 通过next元素或者decision元素来定义跳转规则;
为了提高多个Step的执行效率 , 框架提供了Step并行执行的能力(使用split进行声明 , 通常该情况下需要Step之间没有任何的依赖关系 , 否则容易引起业务上的错误) 。 Step包含了一个实际运行的批处理任务中的所有必需的信息 , 其实现可以是非常简单的业务实现 , 也可以是非常复杂的业务处理 , Step的复杂程度通常是业务决定的 。
本文插图
每个Step由ItemReader、ItemProcessor、ItemWriter组成 , 当然根据不同的业务需求 , ItemProcessor可以做适当的精简 。 同时框架提供了大量的ItemReader、ItemWriter的实现 , 提供了对FlatFile、XML、Json、DataBase、Message等多种数据类型的支持 。
框架还为Step提供了重启、事务、重启次数、并发数;以及提交间隔、异常跳过、重试、完成策略等能力 。 基于Step的灵活配置 , 可以完成常见的业务功能需求 。 其中三步走(Read、Processor、Writer)是批处理中的经典抽象 。
本文插图
作为面向批的处理 , 在Step层提供了多次读、处理 , 一次提交的能力 。
在Chunk的操作中 , 可以通过属性commit-interval设置read多少条记录后进行一次提交 。 通过设置commit-interval的间隔值 , 减少提交频次 , 降低资源使用率 。 Step的每一次提交作为一个完整的事务存在 。 默认采用Spring提供的声明式事务管理模式 , 事务编排非常方便 。 如下是一个声明事务的示例:
本文插图
框架对于事务的支持能力包括:
Chunk支持事务管理 , 通过commit-interval设置每次提交的记录数;
支持对每个Tasklet设置细粒度的事务配置:隔离界别、传播行为、超时;
支持rollback和no rollback , 通过skippable-exception-classes和no-rollback-exception-classes进行支撑;
支持JMS Queue的事务级别配置;
另外 , 在框架资深的模型抽象方面 , Spring Batch也做了极为精简的抽象 。
本文插图
仅仅使用六张业务表存储了所有的元数据信息(包括Job、Step的实例 , 上下文 , 执行器信息 , 为后续的监控、重启、重试、状态恢复等提供了可能) 。
BATCH_JOB_INSTANCE:作业实例表 , 用于存放Job的实例信息
BATCH_JOB_EXECUTION_PARAMS:作业参数表 , 用于存放每个Job执行时候的参数信息 , 该参数实际对应Job实例的 。
BATCH_JOB_EXECUTION:作业执行器表 , 用于存放当前作业的执行信息 , 比如创建时间 , 执行开始时间 , 执行结束时间 , 执行的那个Job实例 , 执行状态等 。
BATCH_JOB_EXECUTION_CONTEXT:作业执行上下文表 , 用于存放作业执行器上下文的信息 。
BATCH_STEP_EXECUTION:作业步执行器表 , 用于存放每个Step执行器的信息 , 比如作业步开始执行时间 , 执行完成时间 , 执行状态 , 读写次数 , 跳过次数等信息 。
BATCH_STEP_EXECUTION_CONTEXT:作业步执行上下文表 , 用于存放每个作业步上下文的信息 。
推荐阅读
- 「」儿童节就送阿尔法蛋学习手表,安全贴心又能学习
- -悟空哥哥-618年中大促力来袭,iQOO Neo3应该是你不容错过的5G手机
- 埃尔法哥哥面对用户需求与AI技术之间的不平衡,AI产品经理该如何做?
- 埃尔法哥哥谁说机器学习难?它在这朵云上就没有门槛
- 埃尔法哥哥Python基础语法之“数据应用”
- 埃尔法哥哥Bionumerics软件的多位点VNTR分析
- 埃尔法哥哥一个例子就能读懂大数据,原来数据分析能在这些行业里使用
- 埃尔法哥哥C++程序员的职业生涯规划
- 埃尔法哥哥MAML-Tracker:用目标检测思路做目标跟踪?小样本即可得高准确率丨CVPR 2020
- 埃尔法哥哥数据规范之代码表
