内容来自《Spring Batch 批处理框架》,作者:刘相。
我只是个搬运工。

一、Spring Batch提供了独立的标签用来顶一个Job配置,分别是job、step、tasklet、chunk等。共有6个外层标签使用,如下:

<batch:job id=""></batch:job><batch:flow id=""></batch:flow>
<batch:job-listener></batch:job-listener>
<batch:job-repository/>
<batch:step id=""></batch:step>
<batch:step-listener></batch:step-listener>

二、Job配置的标签和属性介绍  

  1.job标签共有6个属性,分别是:

<batch:job id="" job-repository="" incrementer="" restartable="" parent="" abstract="true"></batch:job>

    id:Job名称,作业的唯一标识。在整个跑批程序运行上下文中不允许重复。
    job-repository:指定作业仓库。定义该Job运行期间使用的Job仓库,默认使用名字为jobRepository的Bean。
    incrementer:作业参数递增器。只有在org.springframework.batch.core.launch.JobOperator 的 startNextInstance方法中使用。
    restartable:作业是否可以重启。默认是true,表示支持重启。当设置为true时,只有当JobInstance为FAILED状态时才可以重启。
    parent:指定该作业的父类作业。指定当前Job的父Job,Job可以从其他Job继承。通常在父Job中定义共有的属性。
    abstract:定义作业是否是抽象的,默认是true,抽象的,不能被实例化。  

  2.job标签的子元素

<batch:job id="" job-repository="" incrementer="" restartable="" parent="" abstract="true"><batch:step id="" allow-start-if-complete="" next="" parent=""></batch:step><batch:split id="" next="" task-executor=""></batch:split><batch:flow parent="" id=""></batch:flow><batch:decision decider="" id=""></batch:decision><batch:listeners></batch:listeners><batch:validator ref=""></batch:validator><batch:description></batch:description>
</batch:job>

    step:定义Job的作业步 。

    split:定义并行作业步Step。

    flow:引用独立配置的作业步流程。

    decision:定义作业步执行的条件判断器,用于判断后续执行的作业步。

    listeners:定义作业Job执行时的拦截器。

    validator:定义作业参数检验器。也就是JobParameters的验证器。

    description:描述该作业

  3.Job拦截器    

    Spring Batch框架提供了自己的拦截器,可以在Job执行前后加入自定义的逻辑判断,自定义拦截器需要实现接口:org.springframework.batch.core.JobExecutionListener。

    JobExecutionListener源码:

public interface JobExecutionListener {void beforeJob(JobExecution jobExecution);void afterJob(JobExecution jobExecution);
}

    自定义拦截器:

public class MyListener implements JobExecutionListener {private static final Logger LOGGER = LoggerFactory.getLogger(MyListener.class);@Overridepublic void beforeJob(JobExecution jobExecution) {String jobName = jobExecution.getJobParameters().getString("jobName");LOGGER.info(" -- > beforeJob 拦截的job名称:[{}]", jobName);}@Overridepublic void afterJob(JobExecution jobExecution) {long instanceId = jobExecution.getJobInstance().getInstanceId();LOGGER.info(" -- > afterJob 拦截的job实例ID:[{}]", instanceId);}}

    Job配置拦截器:

<bean id="myListener" class="com.jason.batch.job.listeners.MyListener"></bean><batch:job id="firstJob" job-repository="jobRepository"><!-- 省略其余步骤 --><batch:listeners><batch:listener ref="myListener"></batch:listener></batch:listeners>
</batch:job>

    需要注意的是:如果拦截器方法出现异常,会导致Job执行的状态为“FAILED”,所以我们在设置拦截器的时候要注意异常的处理。

    在配置文件中也可以配置多个拦截器,多个拦截器的执行顺序按照配置的顺序执行。

    <batch:job id="firstJob" job-repository="jobRepository"><!-- 省略其余步骤 --><!-- 多个拦截器配置 --><batch:listeners><batch:listener ref="listener_01"></batch:listener><batch:listener ref="listener_02"></batch:listener><batch:listener ref="listener_03"></batch:listener></batch:listeners></batch:job>

    则上面三个拦截器的执行顺序是:

      1.调用listener_01拦截器的before方法。

      2.调用listener_02拦截器的before方法。

      3.调用listener_03拦截器的before方法。

      4.调用listener_03拦截器的after方法。

      5.调用listener_02拦截器的after方法。

      6.调用listener_01拦截器的after方法。

    Spring Batch 中不仅可以实现接口设置拦截器,也可以使用注解的方式。这两种方式的配置方法都是一样的。

    @BeforeJob:声明作业执行前的操作

    @AfterJob:声明作业执行后的操作

  4.Job Parameters校验    

    Spring Batch框架提供了参数校验的功能。我们可以实现接口org.springframework.batch.core.JobParametersValidator就可以自定义参数校验器,也可以使用框架提供的实现类CompositeJobParametersValidator和DefaultJobParametersValidator分别完成不同的功能。

    CompositeJobParametersValidator:参数校验组合模式,支持一组参数校验。

    DefaultJobParametersValidator:参数校验默认实现,支持必须输入的参数和非必须输入的参数。

    <!-- 验证必输参数jobName和非必输参数path、jobDay --><bean id="myValidator" class="org.springframework.batch.core.job.DefaultJobParametersValidator"><property name="requiredKeys"><set><value>jobName</value></set></property><property name="optionalKeys"><set><value>path</value><value>jobDay</value></set></property></bean><batch:job id="firstJob" job-repository="jobRepository"><!-- 省略其余步骤 --><batch:validator ref="myValidator"></batch:validator></batch:job>

    接口DefaultJobParametersValidator的源码:

  public class DefaultJobParametersValidator implements JobParametersValidator, InitializingBean {private Collection<String> requiredKeys;private Collection<String> optionalKeys;// 其余省略}

  5.Job 抽象与继承    

    Spring Batch框架支持抽象job的定义和Job的继承特性,抽象Job和java中的抽象类相似。抽象的Job不能被实例化,直接调用抽象的Job会报错。定义Job是将abstract设置为true即为抽象Job。

    <batch:job id="baseJob" abstract="true"><batch:listeners><batch:listener ref="baseListeners"></batch:listener></batch:listeners></batch:job>

    通过parent属性可以指定当前Job的父Job,子Job继承父Job可以获得父类中所有属性和能力,可以多个Job继承同一个抽象父Job。

  <batch:job id="firstJob" parent="baseJob"><!-- 省略其余步骤 --><batch:listeners merge="true"><batch:listener ref="myListener"></batch:listener></batch:listeners></batch:job>

    上面firstJob继承了baseJob父类,拦截器merge为true表示firstJob具有baseListeners和myListener两个拦截器的功能,如果merge为false,则子类的拦截器会覆盖掉父类Job中拦截器的功能。

三、Job的高级特性  

  1.scope    

    scope用来声明IOC容器中对象的存活周期,具体见:https://www.cnblogs.com/whx20100101/p/9807252.html

    Step scope 是Spring Batch 框架提供的自定义的Scope,将Bean的scope=“step”,表示该bean在Step开始的时候初始化,在Step结束的时候销毁bean,
    在Spring Batch框架中,step scope会被自动注册到Spring的上下文中,如果没有使用Spring的配置文件,则需要显示的声明step scope。

    <!-- 显示的声明StepScope --> <bean class="org.springframework.batch.core.scope.StepScope"/><!-- 声明bean的scope为step --> <bean id="fileReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step"></bean>

    

转载于:https://www.cnblogs.com/whx20100101/p/10636351.html

spring batch (四) Job的配置及配置文件说明介绍相关推荐

  1. Spring batch 2.0例子(lineMapper)

    http://www.ibm.com/developerworks/cn/java/j-lo-springbatch1/ 使用 Spring Batch 构建企业级批处理应用: 第 1 部分 刘 光瑞 ...

  2. Spring batch教程 之 读取CSV文件并写入MySQL数据库

    原文作者: Steven Haines - 技术架构师 编写批处理程序来处理GB级别数据量无疑是种海啸般难以面对的任务,但我们可以用Spring Batch将其拆解为小块小块的(chunk). Spr ...

  3. Spring事务——Spring 2.X的事务配置策略

    为什么80%的码农都做不了架构师?>>>    Spring 2.X的事务配置策略 虽然前面介绍的TransactionProxyFactoryBean配置策略简单易懂,但配置起来极 ...

  4. 使用 Spring Batch 构建企业级批处理应用

    https://www.ibm.com/developerworks/cn/java/j-lo-springbatch1/index.html https://www.ibm.com/develope ...

  5. Spring batch Job define

    http://www.ibm.com/developerworks/cn/java/j-lo-springbatch1/ 总述 本系列文章旨在通过示例搭建以及特性介绍,详细讲述如何利用 Spring ...

  6. 扩展Spring Batch –步骤分区

    在之前的几篇文章中,我们已经讨论了如何启动和运行Spring Batch. 现在,我们将开始讨论可用于扩展Spring Batch的一些策略. 本文将重点介绍如何对步骤进行分区,以使该步骤具有多个线程 ...

  7. Spring Bean的三种配置方式

    目录 一.传统的XML配置方式 二.基于java注解的配置 三.基于类的Java Config 正文 Spring Bean有三种配置方式: 传统的XML配置方式 基于注解的配置 基于类的Java C ...

  8. Spring Batch 批处理框架

    <Spring Batch 批处理框架> 基本信息 作者: 刘相 出版社:电子工业出版社 ISBN:9787121252419 上架时间:2015-1-24 出版日期:2015 年2月 开 ...

  9. spring之旅第四篇-注解配置详解

    spring之旅第四篇-注解配置详解 一.引言 最近因为找工作,导致很长时间没有更新,找工作的时候你会明白浪费的时间后面都是要还的,现在的每一点努力,将来也会给你回报的,但行好事,莫问前程!努力总不会 ...

最新文章

  1. test1---peersim 0
  2. Python核心编程学习日记之错误处理
  3. android opengl es 纹理 不同设备 白色,android – OpenGL ES 2.0纹理没有在某些设备上显示...
  4. CentOS6.6上编译安装httpd2.4
  5. bzoj2547 [Ctsc2002]玩具兵 dp+二分匹配
  6. 返回固定页面的web服务器
  7. android知识杂记(一)
  8. 【HDU 6020】 MG loves apple (乱搞?)
  9. Tensorflow训练渐渐变慢,迭代一段时间卡死
  10. ThinkPHP商城分类无限分类遍历数据
  11. 软件测试数据中心,数据中心行业测试方案.PDF
  12. EXCEL中如何撤销工作表保护
  13. matlab三轴定位程序,三边测量定位MATLAB源码
  14. linux小红帽网卡设定,LINUX红帽子怎么配置上网
  15. 如何解决Word里插入图片会被压缩
  16. laravel实现-阿里接口根据银行卡号查询银行名
  17. 100天python、github_GitHub - 100440175/Python-100-Days: Python - 100天从新手到大师
  18. C# 蓝牙编程(InTheHand.Net.Personal.dll-32feet),教程地址
  19. Apache Pulsar:实时数据处理中消息,计算和存储的统一
  20. 对于算法工程师职业生涯规划的考虑

热门文章

  1. XAML实例教程系列 – 对象和属性
  2. 云时代的安全解读:云安全≠云计算安全
  3. 使用Google App Engine、Google Closure Library与Clojure编写HTML5应用
  4. JBOSS java.lang.NoClassDefFoundError: org/apache/commons/digester/RuleSet
  5. mini2440 裸机编程 -led
  6. 我的android面试经历
  7. hadoop三个配置文件的参数含义说明
  8. Redis相比memcached
  9. go语言中没有隐藏的this指针
  10. C#中的{n}运算符