Spring Batch学习笔记(一)初初初步了解
初初初级了解Spring Batch简介
从官网copy一段介绍下来。
A lightweight, comprehensive batch framework designed to enable the development of robust batch applications vital for the daily operations of enterprise systems.
一个轻量级,全面的批处理框架,旨在支持开发对企业系统的日常运行至关重要的强大的批处理应用程序。
批处理就是对某对象进行批量的处理,目前比较常见的批处理包含两类:DOS(磁盘操作系统)批处理和PS批处理,但在这里,通过批处理,可以完成数据加载、抽取、转换、验证、清洗等功能,现在还不明白这些是什么,接着向下看。
总之,在处理数据这方面,无非是,读取,处理,写入数据罢了。
初初初级了解Spring Batch组成
Spring Batch
把批处理简化为作业
(job)和作业步骤
(step)两部分,在作业步骤
中,把数据处理抽象的分为读数据(Reader)、处理数据(Processor)、写数据(Writer)三个步骤,异常处理机制分为跳过、重试、重启三种,作业方式分为多线程、并行、远程、分区四种。
再来看看带佬们的具体组件图。
- JobLauncher:Spring batch Job启动程序,作业执行器
- JobRepository:JobRepository是记录Job、Step和发起Job的执行信息
- ItemReader:从数据源读数据
- ItemProcessor:对数据进行处理,如数据清洗、转换、过滤、校验等
- ItemWriter:写入数据到指定目标
这里我们可以看见在Job块的右上角有一个数字1,Step左上角的*号,说明了,一个Job可以对应多个Step,而每个Step只能对应一个抽象的数据步骤。
job是我们运行的基本单位,它内部由step组成,job本质上可以看成step的一个容器。
写的单位是可以配置的,我们可以一次写一条数据,也可以一次写一个chunk的数据。
初初初级了解chunk
当客户端向服务器请求一个静态页面或者一张图片时,服务器可以很清楚的知道内容大小,然后通过Content-Length
消息首部字段告诉客户端需要接收多少数据。但是如果是动态页面时,服务器是不可能预先知道内容大小,这时就可以使用Transfer-Encoding:chunk
模式来传输数据了。
编码使用若干个chunk组成,由一个标明长度为0的chunk结束。每个chunk有两部分组成,第一部分是该chunk的长度,第二部分就是指定长度的内容,每个部分用CRLF(即:\r\n回车换行)隔开。在最后一个长度为0的Chunk中的内容是称为footer的内容,是一些没有写的头部内容。
Spring Batch不是调度框架
任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。
Spring Batch
本身是批处理逻辑的抽象,是对执行任务的规范化,跟调度框架是两回事,但可以结合调度框架完成作业,完成批处理的任务。
初初初级了解处理Chunk
首先来看看处理流程
它的意思就和图示的一样,由于我们一次batch的任务可能会有很多的数据读写操作,因此一条一条的处理并向数据库提交的话效率不会很高,因此spring batch提供了chunk这个概念,我们可以设定一个chunk size,spring batch 将一条一条处理数据,但不提交到数据库,只有当处理的数据数量达到chunk size设定的值得时候,才一起去commit.
数据,但不提交到数据库,只有当处理的数据数量达到chunk size设定的值得时候,才一起去commit.