spring batch就是一个轻量级的批处理框架,他的轻量级是相对于MapReduce、Spark之类的集群批处理架构来说的。虽然spring batch支持机器集群,但是多用的是单机的多线程并行处理。
大家都知道MapReduce适合超大型数据量的批量处理,对于几分钟,几十秒钟的处理就不要放到Mapreduce上了,这只会让处理时间更长,因为MapReduce的任务分配和启动过程就要消耗1-2分钟。
另外对于一些不是特别复杂的批处理,如果手头没有Hadoop这样的集群可用,而且一台电脑多线程处理就足够应付时,spring batch会是一个很好的选则。(当然,如果写一个简单的批处理脚本够用,那么,首选批处理脚本。)
但是,由于官方的教程不太适合初学者不快速的上手,这篇教程是大概两个礼拜时间集中看spring batch相关内容的总结。这里整理的顺序将会尽量从适合学习和入门。
spring batch用来做批处理,批处理最早基本用来指脚本,比如批处理脚本,就是把一系列的操作写到一个bat或者sh文件里面,一次调用,脚本里面的一系列操作就按照顺序逐条指令执行了。
也就是说,批处理首先是能够包含一系列的处理指令,并且可以指定顺序,然后这些指令按照指定的顺序执行。然而现如今是一个分布式的时代,和一个水平扩展远大于单机性能的时代,大多优秀的产品都在支持并行或者集群,spring batch在这两方面支持的怎么样呢?
spring batch具备工作流引擎的相似功能,可以在xml配置文件中配置一系列相互关联的步骤。你需要配置一个任务(Job),在任务里面定义多个Step,Step和Step之间通过next标签指明前后关系。
同时,他支持同一个任务的多线程、多进程、多服务器处理。接下来把相关资料分类整理如下:
在这个最简单的示例中,你会看到组成Job的Step可以是自定义的一个tasklet,也可以是使用spring batch提供的标准的ItemReader、ItemProcesser、ItemWriter组成的一个tasklet。
spring batch默认支持文本文件、XML文件、数据库的读和写,提供了内置的ItemReader和ItemWriter。
quartz+spring batch做到定时触发批处理任务
spring schedule + spring batch定定时触发-英文
Spring Batch MultiResourceItemReader example
这一篇是中文的,写的其实不如官网清楚,下面是官网的地址:
Scaling and Parallel Processing
文章写的不是特别详细,但是已经给出了足够的线索,也就是需要把JobRepository定义成数据库存储形式。