首页 加入收藏

Spring Batch 2. 行话

2015年08月04日 15:08供稿中心: 课工场
摘要:Spring Batch 2. 行话
Spring Batch 2. 行话
每一个行业都有自己的行话,SpringBatch也不例外。

Job一个Job是用于封装一整个批处理的实体。和其它Spring项目一样,一个Job和一个XML配置文件相连。这个文件可能叫任务配置。无论如何,Job是整个层次结构的顶点。

一个Job就是一系列Step的容器。Job可以定义一些属性,如是否可以重新执行。Step会使用Job定义的属性。

Job的定义包含下面几个部分
• 一个简单的名字
• 一系列步骤
• 是否支持重新执行

SpringBatch提供一个基本的实现SimpleJob。可以用下面方式配置一个Job
Xml代码 

  • <job id="footballJob">  

  •     <step id="playerload" next="gameLoad"/>  

  •     <step id="gameLoad" next="playerSummarization"/>  

  •     <step id="playerSummarization"/>  

  • </job>  


<job id="footballJob">    <step id="playerload" next="gameLoad"/>    <step id="gameLoad" next="playerSummarization"/>    <step id="playerSummarization"/></job>
JobInstance一个JobInstance就是一个Job的实例。一个Job的每次受调度都会产生一个JobInstance。假如我们配置一个每天都运行的任务。那么每天都会有一个JobInstance产生。1月1号会有一个JobInstance,1月2号会有一个。如果1月1号的那个JobInstance执行失败,再执行一次并不会新产生一个JobInstance,还是1月1号的那个JobInstance。

一个JobInstance不和任何数据绑定。JobInstance只保存状态,如何加载数据完全由ItemReader的实现决定。 


JobParameters
JobParameters用于区分JobInstance。一个JobParameters是在开始一个Job时的一组参数。

在上图的例子中,有两个JobInstance,1月1号和1月2号。但是它们属于同一个Job,所以我们可以说JobInstance = Job + JobParameters。

JobExecution
一个JobExecution就是一次真正意义上一次Job的执行。一个JobInsntace可以有多个JobExecution,一个JobExecution的失败并不意味这个JobInstance失败。

一个Job定义这个Job该如何执行。JobInstnace用于将一系列的JobExecution组织起来。JobExecution会将本次执行的状态记录下来。

JobExecution有如下属性:
  • status:本次执行的状态,可以是BatchStatus.STARTED、BatchStatus.FAILED、BatchStatus.COMPLETED等

  • startTime:JobExecution执行开始时间

  • endTime:JobExecution执行的结束时间

  • exitStatus:JobExecution执行的结果

  • createTime:JobExecution的生成时间。如果还没有开始执行那么就没有startTime,但是createTime始终是有的。

  • lastUpdated:最后更新时间

  • executionContext:一个容器,用于执行时需要保存的用户数据。

  • failureExceptions:执行时碰到的异常列表。有多个异常的导致失败时会有用。


    Step
    每个Job包含一个或多个Step。一个Step包含实际执行需要的信息。一个Step可以很简单也业很复杂。一个简单的Step可能不需要代码或只要写一点点代码,如把数据从文件加载到数据库中。和Job一样,一个Step也有StepExecution的概念。如下图所示,Job由Step组成,JobExecution由StepExecution组成。

    StepExecution
    StepExecution表示一个Step的执行。 StepExecution只有在真正开始时才会生成,而不是JobExecution开始时就生成所有的StepExecution。StepExecution有对应的Step(可能只是名字?)和JobExecution的引用,以及和事务相关的数据。它还有一个ExecutionContext,用于保存用户数据。

    StepExecution有下面的一系列属性。

    • status:本次执行的状态,可以是BatchStatus.STARTED、BatchStatus.FAILED、BatchStatus.COMPLETED等

    • startTime:JobExecution执行开始时间

    • endTime:JobExecution执行的结束时间

    • exitStatus:JobExecution执行的结果

    • createTime:JobExecution的生成时间。如果还没有开始执行那么就没有startTime,但是createTime始终是有的。

    • executionContext:一个容器,用于执行时需要保存的用户数据。

    • failureExceptions:执行时碰到的异常列表。有多个异常的导致失败时会有用。

    • readCount:有少条记录已经成功的读了。

    • writeCount:有少条记录已经成功的写了。

    • commitCount:已经提交了多少次事务了。

    • rollbackCount:和Step相关的事物被回滚了多少次。

    • readSkipCount:读跳过了多少次。resulting in a skipped item.?

    • processSkipCount:处理跳过了多少次。resulting in a skipped item.

    • filterCount:用ItemProcessor跳过了多少条记录。

    • writeSkipCount:写跳过了多少次。resulting in a skipped item.?

      ExecutionContextExecutionContext是一系列的键/值对,由框架控制保存。它允许用户保存StepExecution或JobExecution的状态信息。ExecutionContext和Quartz的JobDataMap非常类似。使用ExecutionContext的最佳例子就是重试的辅助。以读取文本文件为例,处理时可以将处理到哪一行记录到ExecutionContext中,框架会把这些信息在检入点永久保持起来。当失败时可以从上次失败的那个点开始重新运行。


      JobRepository
      JobRepository是上面所有东西的存储机制。它为JobLauncher、Job和Step的实现提供了CRUD操作。当一个Job开始运行时,从JobRepository获取一个JobExecution。在执行阶段StepExecution和JobExecution会保存到JobRepository中。

      JobLauncher JobLauncher用于从JobRepository获取JobExecution和执行该JobExecution。接口定义如下。
      Java代码 

      • public interface JobLauncher {   

      •     public JobExecution run(Job job, JobParameters jobParameters)   

      •         throws JobExecutionAlreadyRunningException, JobRestartException;   

      •     }   

      • }  


      public interface JobLauncher {    public JobExecution run(Job job, JobParameters jobParameters)        throws JobExecutionAlreadyRunningException, JobRestartException;    }}ItemReaderItemReader用于抽象Step的输入。当所有输入读完后返回null。

      ItemWriter
      ItemWriter用于抽象Step的输出,每次一条记录。通常来说,ItemWriter并不知道下一条要处理什么,它只有当前的那条记录。

      ItemProcessor
      ItemProcessor用于抽象一条记录的处理。ItemReader用于读一条记录,ItemWriter用于写一条记录,ItemProcessor用于应用业务逻辑,从一种格式到另一种格式。在处理过程中,返回null表示这条记录不需要写下来。


      标签: java
      • 相关阅读
      温州艾威北大青鸟中心(JAVA与.NET方向)启动公告2017.05.11
      Java最新学习方案2015.09.21
      js框架大PK2015.08.31
      如何成为一名软件架构师?2015.08.25
      Java I/O流概念分析整理2015.08.21
      • 全国校区查询
      • 新手入门点击榜
      • 新手入门最新文章
      • 热门标签
      关于我们
      公司简介
      发展历程
      青鸟荣誉
      联系我们
      加入我们
      青鸟课程
      ACCP
      学士后Java
      BENET
      网络营销
      启蒙星IT工程师基础课程
      学习客户端下载
      青鸟优师
      青鸟微讯
      学士后Android软件工程师
      网络营销师1.0
      关注我们
      RSS订阅
      北大青鸟网络营销学院
      北大青鸟学员社区
      北大青鸟官方微信
      北大青鸟微社区
      回顶部 新版反馈 回到首页
      官方新版意见收集

      *

      官方新版意见收集

      提交成功,感谢您的反馈。

      我们会认真阅读和考虑每个用户的反馈。