作为springcloud组成当中提供批处理能力的模块。相关概念如下:
Spring Batch的结构:
从上到下以三层架构理解:应用层、核心层、基础架构层。应用层包含所有的批处理作业,通过Spring框架管理程序员自定义的代码。核心层包含了Batch启动和控制所需要的核心类,如:JobLauncher、Job和step等。应用层和核心层建立在基础构架层之上,基础构架层提供共通的读(ItemReader)、写(ItemWriter)、和服务(如RetryTemplate:重试模块。可以被应用层和核心层使用)。而实际实现的业务逻辑则有基础架构层构建。
Spring Batch流程介绍:
上图描绘了Spring Batch的执行过程。说明如下:
每个Batch都会包含一个Job。Job就像一个容器,这个容器里装了若干Step,Batch中实际干活的也就是这些Step,至于Step干什么活,无外乎读取数据,处理数据,然后将这些数据存储起来(ItemReader用来读取数据,ItemProcessor用来处理数据,ItemWriter用来写数据) 。JobLauncher用来启动Job,JobRepository是上述处理提供的一种持久化机制,它为JobLauncher,Job,和Step实例提供CRUD操作。
外部控制器调用JobLauncher启动一个Job,Job调用自己的Step去实现对数据的操作,Step处理完成后,再将处理结果一步步返回给上一层,这就是Batch处理实现的一个简单流程。
Step执行过程:
从DB或是文件中取出数据的时候,read()操作每次只读取一条记录,之后将读取的这条数据传递给processor(item)处理,框架将重复做这两步操作,直到读取记录的件数达到batch配置信息中”commin-interval”设定值的时候,就会调用一次write操作。然后再重复上图的处理,直到处理完所有的数据。当这个Step的工作完成以后,或是跳到其他Step,或是结束处理。
这就是一个SpringBatch的基本工作流程。
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"batch.xml");
JobLauncher launcher = (JobLauncher) context.getBean("jobLauncher");
Job job = (Job) context.getBean("helloWorldJob");
try {
/* 运行Job */
JobExecution result = launcher.run(job, new JobParameters());
/* 处理结束,控制台打印处理结果 */
System.out.println(result.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
说明:
1、读取xml的上下文ClassPathXmlApplicationContext
2、JobLauncher启动Job返回执行结果JobExecution
来自 <Spring Batch 之 Sample(Hello World)(三) - 孤旅者 - 博客园>
自己的理解
定时。批处理可能遇到在指定时间处理的业务,所以可以使用@schedule注解添加定时启动
流程。springbatch中作业、作业里面的步骤。可以实现流水线模式来处理一系列串行的业务。但是否能够支持分支流程需要研究下。
配置:为了侧重于灵活化的话,job需要配置在xml里面一边支持模块组装。
已支持的功能。springbatch里面已支持文件读取处理。