1. Job

Job是一个封装了 Batch 整个执行过程的实体,和其他 Spring 工程一样,Job可以基于 XML 和 Java-based配置两种,但是无论使用怎样的配置,Job都在这个结构的顶层。结构层次如下:

在 Spring Batch 中,Job是 Step的一个容器,一个 Job 根据一定的逻辑聚合了一个或多个 Step,使 Step 按照一定的规则执行,同时 Job还可以定义在所有 Step 之上的属性,如Job是否可以重启。Job 具体的属性包括一下几类:

  • Job 的名称,作为 Job 的唯一标识
  • Job 内 Step 的执行顺序
  • Job 是否支持重启

下边是一个基于 Java-based 配置的 Job 定义:

@Bean
public Job footballJob() {
  return this.jobBuilderFactory.get("footballJob")
  .start(playerLoad())
  .next(gameLoad())
  .next(playerSummarization())
  .end()
  .build();
}

1.1 JobInstance

一个 Job 的执行会生成一个 Job Instance,但是并不是每一次 Job 执行都会生成一个 Job Instance。在 Launch一个 Job 的时候,如果根据 Job 名称和运行参数判断当前 Job Repository中已经存在一个 Job Instance ,就会继续执行已经存在的,如果不存在则会新启一个Job Instance。所以 Job Instance 可以理解为:
Job Instance = Job Name + Job Parameters

1.2 JobParameters

Job Parameters 是运行时 Job 需要传入的参数,会存储在 Job 运行的上下文中:

如上图中这个例子,EndOfDay 时一个 Job,运行的时候会生成一个 Job Instance,这个 Instance 接受一个日期类型的参数 D1(Job Parameters),那这个 Instance 就会被唯一标记为D1的 EndOfDay 。

Spring Batch 框架允许有不用来标记一个 Job Instance 的参数。

1.3 JobExecution

Job 的每一次运行,不管成功还是失败都会产生一条 JobExecution 记录,这个记录包括状态,开始时间,结束时间,推出原因,运行参数等整个运行期间的所有信息。一个 Job Instance 如果运行成功会对应一个 Job Executions,如果运行失败会对应多条 Job Execution。

这里我们先来了解一下概念。具体Job Execution 的表我们会在后续章节中介绍,

2. Step

Step 是批处理的一个最小的执行事务,这个执行事务可以是一个实现Tasklet接口的实现类,也可以是标准的 reader/processor/writer 结构。一个 job 包含至少一个 Step ,多个 Step 可以有一定的逻辑顺序。同样的每个 Step 执行对应一个或多个 Step Execution。执行成功对应的一条记录,执行失败,对应多条记录。Step Executioon 同样会记录运行期的全部数据。

3. ExecutionContext

Execution Context 用来记录 Job Execution 和 Step Execution 状态的键值对集合,主要是用来方便的进行现场的恢复,比如在 ItemReader 执行前,记录当前的状态,当 ItemReader执行期间遇到异常推出,或者母体程序异常关闭,更或者机房断电等意外发生时,我们可以保存执行的前的状态,根据这个状态,重新开始。
所以 Execution Context 包括 JobExecutionContext 和 StepExecutionContext 两部分,分别对应各自的表,表结构我们在后续章节介绍。

4. 配置一个 Job

如果基于Java-based 配置一个 Job,我们一般通过JobBuilderFactory get到一个 JobBuilder

@Bean
public Job footballJob() {
  return this.jobBuilderFactory.get("footballJob")
  .start(playerLoad())
  .next(gameLoad())
  .next(playerSummarization())
  .end()
  .build();
}

然后根据传入的参数会得到一个 SimpleJobBuilder 或者 JobFlowBuilder :

在 SimpleJobBuilder 中我们可以看到有下列属性可以设置:

在 JobFlowBuilder 中则可以设置如下属性:

5. 运行一个 Job

对于非 web 应用程序,框架提供了 CommandLineJobRunner 用于 launch 一个 batch 的运行:

<bash$ java CommandLineJobRunner io.spring.EndOfDayJobConfiguration endOfDay
schedule.date(date)=2007/05/05

这种方式每次运行都会生成一个新的 JobLaunch。
对于 Web 应用程序,我们只需要注入一个 JobLaunch 即可,在代码中注入一个 JobLaunch,可以直接调用 jobLaunch.run 方法,执行一个 Job。

运行代码如下:

@Controller
public class JobLauncherController {
  @Autowired
  JobLauncher jobLauncher;
  @Autowired
  Job job;
  @RequestMapping("/jobLauncher.html")
  public void handle() throws Exception{
  jobLauncher.run(job, new JobParameters());
  }
}

在 Web 程序中,因为 Spring Bean 的单例特性,所以所有的启动是一同一个 JobLaunch。

截止到目前所有的 Batch 领域概念都已经介绍完了,后边我们将进入实例阶段,介绍真正执行逻辑的 Reader/Processor/Writer。

SpringBatch从入门到放弃003- 核心概念2的更多相关文章

  1. Docker入门——理解Docker的核心概念

    1 前言 相信不少人听过这么一句话: 人类的本质是复读机. 在软件开发领域也一样,我们总是想寻找更好地方式复制优秀的逻辑或系统.最核心的方法是抽取通用逻辑和组件,把差异化的东西接口化或配置化,达到复用 ...

  2. JVM入门到放弃之基本概念

    1. 基本概念 jvm 是可运行Java代码的假想计算机,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收堆和一个存储方法域. jvm 是运行在操作系统之上的,屏蔽了与具体操作系统平台相关的信息 ...

  3. Maven入门-2.Maven一些核心概念介绍

    1.Maven仓库2.Maven坐标3.Maven插件和目标4.Maven生命周期4.1 clean:清理项目4.2 default:构建项目(重要)4.3 site:建立项目站点 1.Maven仓库 ...

  4. 入门大数据---Flink核心概念综述

    一.Flink 简介 Apache Flink 诞生于柏林工业大学的一个研究性项目,原名 StratoSphere .2014 年,由 StratoSphere 项目孵化出 Flink,并于同年捐赠 ...

  5. JAVAEE——BOS物流项目13:Quartz入门案例、核心概念、cron 表达式的格式(了解)

    1.quartz入门案例 本入门案例基于spring和quartz整合完成. 第一步:创建maven工程,导入spring和quartz相关依赖 第二步:创建任务类 第三步:在spring配置文件中配 ...

  6. lucene 核心概念及入门

    lucene Lucene介绍及核心概念 什么是Lucene Lucene是一套用于全文检索和搜索的开放源代码程序库,由Apache软件基金会支持和提供.Lucene提供了一个简单却强大的应用程序接口 ...

  7. Elasticsearch入门教程(二):Elasticsearch核心概念

    原文:Elasticsearch入门教程(二):Elasticsearch核心概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:ht ...

  8. JAVA入门(1.JAVA平台应用 2.核心概念:JVM,JDK,JRE 3.搭建JAVA开发环境 4.学习JAVA的原则)

    主要内容: 1.JAVA平台应用 2.核心概念:JVM,JDK,JRE 3.搭建JAVA开发环境 4.学习JAVA的原则 JAVA的平台应用 JAVA的平台应用分为3个部分: 一.JAVA SE,主要 ...

  9. Mycat入门核心概念

      Mycat中的核心概念     Mycat中的核心概念 1.数据库中间件    Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有 存储引擎,所以并 ...

随机推荐

  1. 正睿OI DAY3 杂题选讲

    正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...

  2. SUSE CaaS Platform 4 - 使用 Ceph RBD 作为持久存储(动态)

    图1 架构图 图2 各存储插件对动态供给方式的支持状况 1.所有节点安装 # yum install ceph-common 复制 ceph.conf 到 worker 节点上 # scp admin ...

  3. VR应用评测 - Luna

    Luna http://store.steampowered.com/app/605770/Luna/ Steam VR 2017年10月发布 | 开发者:Funomena | 好评率92% 一款制作 ...

  4. Vue躬行记(1)——数据绑定

    Vue.js的核心是通过基于HTML的模板语法声明式地将数据绑定到DOM结构中,即通过模板将数据显示在页面上,如下所示. <div id="container">{{c ...

  5. spring5 源码深度解析----- 事务的回滚和提交(100%理解事务)

    上一篇文章讲解了获取事务,并且通过获取的connection设置只读.隔离级别等,这篇文章讲解剩下的事务的回滚和提交 回滚处理 之前已经完成了目标方法运行前的事务准备工作,而这些准备工作最大的目的无非 ...

  6. Java自动化测试框架-01 - TestNG之入门篇 - 大佬的鸡肋,菜鸟的盛宴(详细教程)

    TestNG是什么? TestNG按照官方的定义: TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便. TestNG是一个开源自动化测试框 ...

  7. Mac 下安装配置MongoDB讲解

    1.访问官网地址是:MongoDB Download Center | MongoDB,一般下载server的Community 版,对于一般开发人员来说已经够用了.   2.点击“DOWNLOAD( ...

  8. Java工程师学习指南(入门篇)

    Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...

  9. 各种常见文件的hex文件头

    我们在做ctf时,经常需要辨认各种文件头,跟大家分享一下一些常见的文件头.   扩展名 文件头标识(HEX) 文件描述 123 00 00 1A 00 05 10 04 Lotus 1-2-3 spr ...

  10. Maven插件构建Docker镜像

    背景 微服务架构下,微服务在带来良好的设计和架构理念的同时,也带来了运维上的额外复杂性,尤其是在服务部署和服务监控上.单体应用是集中式的,就一个单体跑在一起,部署和管理的时候非常简单,而微服务是一个网 ...