内容来自《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); @Override
public void beforeJob(JobExecution jobExecution) {
  String jobName = jobExecution.getJobParameters().getString("jobName");
  LOGGER.info(" -- > beforeJob 拦截的job名称:[{}]", jobName);
  }   @Override
  public 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>

    

spring batch (四) Job的配置及配置文件说明介绍的更多相关文章

  1. Spring学习四----------Bean的配置之Bean的配置项及作用域

    © 版权声明:本文为博主原创文章,转载请注明出处 Bean的作用域(每个作用域都是在同一个Bean容器中) 1.singleton:单例,指一个Bean容器中只存在一份(默认) 2.prototype ...

  2. spring的四种数据源配置

     DriverManagerDataSource   spring自带的数据源,配置如下: <bean id="dataSource" class="org.spr ...

  3. Windows下Nginx的配置及配置文件部分介绍

    一.在官网下载 nginx的Windows版本,官网下载:http://nginx.org/download/ 选择你自己想要的版本下载,解压 nginx(例如nginx-1.6.3) 包到你的win ...

  4. Spring Boot整合Spring Batch

    引言 Spring Batch是处理大量数据操作的一个框架,主要用来读取大量数据,然后进行一定的处理后输出指定的形式.比如我们可以将csv文件中的数据(数据量几百万甚至几千万都是没问题的)批处理插入保 ...

  5. Spring Batch 批处理框架

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

  6. spring Bean的三种配置方式

    Spring Bean有三种配置方式: 传统的XML配置方式 基于注解的配置 基于类的Java Config 添加spring的maven repository <dependency> ...

  7. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  8. 跟着刚哥学习Spring框架--通过注解方式配置Bean(四)

    组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Resposit ...

  9. Spring Cloud构建微服务架构(四)分布式配置中心

    Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持.配置服务器为各应用的所有环境提供了一个中心化的外部配置.它实现了对服务端和客户端对Spring Environm ...

随机推荐

  1. apache安装软负载的配置说明

    安装Apache:yum -y install httpd 首先要查看apache的安装版本 命令:httpd –v 第一种: 若安装是2.2版本,则把复制 mod_wl_22.so和mod_wl.s ...

  2. URL.createObjectURL() 实现本地上传图片 并预览功能

    URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL.这个 URL 的生命周期和创建它的窗口中的 document 绑定.这个新 ...

  3. Java Spring Boot VS .NetCore (七) 配置文件

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  4. [转] NodeJS框架express的途径映射(路由)功能及控制

    NodeJS框架express的路径映射(路由)功能及控制 我们知道Express是一个基于NodeJS的非常优秀的服务端开发框架,本篇CSSer将提供express框架的route和route co ...

  5. SA:T1编写主函数法和T2Matlab自带的SA工具箱GUI法,两种方法实现对二元函数优化求解——Jason niu

    %SA:T1法利用Matlab编写主函数实现对定义域[-5,5]上的二元函数求最优解—Jason niu [x,y] = meshgrid(-5:0.1:5,-5:0.1:5); z = x.^2 + ...

  6. PostgreSQL自学笔记:8 查询数据

    8 查询数据 8.1 基本查询语句 select语句的基本格式是: select {* | 字段1[,字段2,...]} [ from 表1,表2... [where 表达式] [group by & ...

  7. 安装tensorflowGPU版本

    ubuntu 16.0# 安装cuda ## 安装sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb.debsudo apt ...

  8. Urozero Autumn 2016. NCPC 2016

    A. Artwork 倒过来并查集维护即可. #include<cstdio> #include<algorithm> using namespace std; const i ...

  9. PAT Basic 1032

    1032 挖掘机技术哪家强 (20 分) 为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 1 ...

  10. HTML5_图片合成_刮刮卡

    刮刮卡(图片合成) 定义: globalCompositeOperation 属性,设置或返回如何将源图像 将 myCanvas 的背景图设置为一张图片,(刮开后显示) // 目标图像(已有的,外面一 ...