spring batch

 1.简介

        Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据    处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和资源管理等重要功能。

业务方案

     1、批处理定期提交。

     2、并行批处理:并行处理工作。

     3、企业消息驱动处理

     4、大规模的并行处理

     5、手动或是有计划的重启

     6、局部处理:跳过记录(如:回滚)

技术目标

     1、利用Spring编程模型:使程序员专注于业务处理,让Spring框架管理流程。

     2、明确分离批处理的执行环境和应用。

     3、提供核心的,共通的接口。

     4、提供开箱即用(out of the box)的简单的默认的核心执行接口。

     5、提供Spring框架中配置、自定义、和扩展服务。

     6、所有存在的核心服务可以很容的被替换和扩展,不影响基础层。

     7、提供一个简单的部署模式,利用Maven构建独立的Jar文件。

   2.结构

       

            这种分层结构有三个重要的组成部分:应用层、核心层、基础架构层。应用层包含所有的批处理作业,通过Spring框架管理程序员自定义的代码。核心层包含了Batch启动和控制所需要的核心类,如:JobLauncher、Job和step等。应用层和核心层建立在基础构架层之上,基础构架层提供共通的读(ItemReader)、写(ItemWriter)、和服务(如RetryTemplate:重试模块。可以被应用层和核心层使用)。

   3.流程介绍

      每个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,或是结束处理。

   4.多个step

springbatch 支持复用已经定义的job  step,同时提供job 和step的继承能力。

Step有next属性,可以指定setp的运行顺序

   5.定时器

   Schedulaer

 <task:scheduled-tasks scheduler="scheduler">

<task:scheduled ref="schedulerLauncher" method="launch" fixed-rate="10000" />

</task:scheduled-tasks>

fixed-rate:任务间隔时间

   6.跳过策略

   skip-limit="1000":允许跳过记录

   <skippable-exception-classes> 

    <include class="java.lang.Exception"/>
      <exclude class="java.io.FileNotFoundException"/>
  </skippable-exception-classes>

 

     include是允许跳过的错,exclude是不允许跳过的错。像上诉代码那样配置的话,所有Exception及其子类(FileNotFoundException除外)发生时,Job都不会被终止;但是当FileNotFoundException发生时,虽然它也是Exception的子类,但Job会被终止,因为FileNotFoundException属于exclude属性的class。

       添加了skip-policy属性后,skip-limit和skippable-exception-classes默认策略将不再起作用

Reader、Processor和Writer抛出例外的时候,SpringBatch处理skip策略的方式是不同的。当Reader发生可以被skip的例外时,SpringBatch会接着去读下面一条记录,并不会回滚事务。当Processor发生可以被skip的例外时,SpringBatch会回滚当前chunk的事务,并将除了引发例外以外的数据传给Writer。当Writer发生可以被skip的例外的时,SpringBatch首先回滚事务,因为传给Writer的是一个list,所以Writer不知道是list中那条记录造成了例外的发生。Writer会将list拆开,一条条的处理,正确的数据提交,错误的数据回滚。

posted @ 2017-12-11 14:25  yinyt  阅读(597)  评论(0编辑  收藏  举报