此系列博客皆为学习Spring Batch时的一些笔记;

Spring Batch Job在运行时有很多元数据,这些元数据一般会被保存在内存或者数据库中,由于Spring Batch在默认配置是使用HSQLDB,也就是说在Job的运行过程中,所有的元数据都被储存在内存中,在Job结束后会随着进程的结束自动消失;在这里我们推荐配置JobRepository去使用MySQL。

在这种情况下,Spring Batch在单次执行或者从一个执行到另外一个执行的时候会使用数据库去维护状态,Job执行的信息包括Job实例、传入的参数、执行的结果、每一个Step执行的结果都会被存储在数据库中;数据库使用了6个表来存储相关信息:

BATCH_JOB_INSTANCE

我们都知道,在Job运行时,一个Job实例被创建;Job实例包含了Job实例它本身和Job参数;所有Job实例本身的信息将会被保存在BATCH_JOB_INSTANCE表中:

 字段 描述 
 JOB_INSTANCE_ID  表的主键
 VERSION  记录的版本
 JOB_NAME  被执行JOB名
 JOB_KEY  Job名和Job参数的Hash值,被使用来唯一标示一个Job实例

BATCH_JOB_PARAMS

这个表包含了所有被传递到Job的参数,正如上面提到的,参数被Spring Batch使用来作为Job标示的一部分。这个表包含的字段如下:

 字段  描述
 JOB_INSTANCE_ID  表示BATCH_JOB_INSTANCE的外键
 TYPE_CD  表示被存储的值的类型(string, date, long, double)
 KEY_NAME  Job参数的键(Job参数作为键值对被传递)
 STRING_VAL  当这个参数是string类型时的值
 DATE_VAL  日期型参数值
 LONG_VAL  长整型参数值
 DOUBLE_VAL  双精度或者单精度型参数值

BATCH_JOB_EXECUTION和BATCH_STEP_EXECUTION

当一个Job被创建并执行时,这个Job的运行状态被保存在BATCH_JOB_EXECUTION表中,其中包括:开始时间、结束时间、最近一次执行的结果;

BATCH_STEP_EXECUTION表和BATCH_JOB_EXECUTION差不多,它包含了每一个Step在执行过程中的开始时间、结束时间、commit的次数、Step状态相关的参数;

BATCH_JOB_EXECUTION表的字段信息:

 字段  描述
 JOB_EXECUTION_ID  表的主键
 VERSION  记录的版本
 JOB_INSTANCE_ID  到BATCH_JOB_INSTANCE表的外键
 CREATE_TIME  Job实例被创建的时间
 START_TIME  Job开始执行的时间
 END_TIME  Job执行结束的时间,不管成功与否
 STATUS  Job被执行的状态
 EXIT_CODE  Job返回时的退出码
 EXIT_MESSAGE  Job返回时的推出消息
 LAST_UPDATED  当前记录上一次被更新的时间

BATCH_STEP_EXECUTION表的字段信息:

 STEP_EXECUTION_ID  表的主键
 VERSION  记录的版本
 STEP_NAME  被配置在Job xml中的Step的名字
 JOB_EXECUTION_ID  连接到BATCH_JOB_EXECUTION表的外键
 START_TIME  Step开始的时间
 END_TIME  Step完成的时间,无论成功与否
 STATUS  Step当前的状态
 COMMIT_COUNT  当前Step被Commit的次数
 READ_COUNT  当前Step读取数据库的次数
 FILTER_COUNT  当前Step读取到的item数量
 WRITE_COUNT  当前Step写的Item数量
 READ_SKIP_COUNT  读取Item时跳过的数量
 WRITE_SKIP_COUNT  写Item时跳过的数量
 PROCESS_SKIP_COUNT  在ItemReader读取后,没有经过ItemProcessor处理的item的数量
 ROLLBACK_COUNT  在Step执行过程中,总的Rollback的数量
 EXIT_CODE  Step完成时返回的退出码
 EXIT_MESSAGE  Step完成时返回的退出消息
 LAST_UPDATED  这条记录上次被更新的时间

BATCH_JOB_EXECUTION_CONTEXT和BATCH_STEP_EXECUTION_CONTEXT

这是两个Context相关的表,它们分别用于存储Job或者Step相关的ExecutionContext的持久化版本,Spring Batch中的ExecutionContext类似于WEB应用程序中的Servlet Context或Session,它们都提供了一个存储信息的全局空间,本质上是作用域在Job或者Step中的一个键值对;这个Job或者Step的ExecutionContext被用来在特定的作用域里面传递信息,如果是Job,它就用来在Step与Step之间传递信息,如果是Step,它用来在多个记录的处理过程中传递信息。

表BATCH_JOB_EXECUTION_CONTEXT和BATCH_STEP_EXECUTION_CONTEXT是这些键值对的序列化版本,它们除了一个外键不同之外,其它几乎都相同;

 字段  描述
 JOB_EXECUTION_ID/STEP_EXECUTION_ID  引用自表BATCH_JOB_EXECUTION或BATCH_STEP_EXECUTION的外键
 SHORT_CONTEXT  Context的字符串表示
 SERIALIZED_CONTEXT  一个被序列化的ExecutionContext,以便在将来重试的时候使用

Spring Batch学习笔记三:JobRepository的更多相关文章

  1. Spring Batch学习笔记二

    此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自 ...

  2. spring batch学习笔记

    Spring Batch是什么?       Spring Batch是一个基于Spring的企业级批处理框架,按照我师父的说法,所有基于Spring的框架都是使用了spring的IoC特性,然后加上 ...

  3. Spring Batch学习笔记(一)

    Spring Batch简介 Spring Batch提供了可重复使用的功能,用来处理大量数据.包括记录.跟踪,事务管理,作业处理统计,作业重启,跳过和资源管理. 此外还提供了更高级的技术服务和功能, ...

  4. spring cloud学习笔记三 Feign与Ribbon负载均衡的区别

    一.Feign的介绍 Feign一般比较书面的解释是:Feign是一个声明式的WebService客户端,使用Feign编写的WebService客户端更加简单,他的使用方法是定义一个接口,然后在上线 ...

  5. Spring Boot学习笔记(三)实现热部署

    pom文件中添加如下依赖即可 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...

  6. Spring Boot 学习笔记(六) 整合 RESTful 参数传递

    Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...

  7. SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证

    整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...

  8. 【转】Spring.NET学习笔记——目录

    目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...

  9. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

随机推荐

  1. Tomcat服务器中配置多个域名,访问不同的web项目

    先说一下在本地电脑怎么实现: 想要在一个tomcat下访问两个web项目时,可以通过添加虚拟host的方式来解决. 详细步骤如下: 1.将两个项目打包放入tomcat的webapps目录下: 2.修改 ...

  2. 用Java实现简单的web服务器

    运行结果: 1.WebServer.java文件 package webserver; import java.io.*; import java.net.*; public class WebSer ...

  3. shape

    <?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http:/ ...

  4. ssh的原理和流程

    一.strtus:第1步:把上面的jar包下载完成后,先在eclipse中新建一个web工程,新建工程的同时最好选上创建的同时添加web.xml文件 第2步:找到下载并解压好的strtus文件中找到a ...

  5. Robot Framework 的安装和配置(转载)

    Robot Framework 的安装和配置 在使用 RF(Rebot framework)的时候需要 Python 或 Jython 环境,具体可根据自己的需求来确定.本文以在有 Python 的环 ...

  6. 【转】监听按钮除OnClick外其他事件的方法,附简易改编的UIButton类

    http://lib.csdn.net/article/unity3d/38463 作者:IceFantasyLcj 大家好,我是雨中祈雨.一直以来,CSDN都是我最好的编程助手.这是我在CSDN的第 ...

  7. cloudera learning4:Hadoop集群规划

    涉及到一些关于硬件的东西,我也不是很懂,记录下来有待以后学习. Hadoop集群一般都是由小到大,刚开始可能只有4到6个节点,随着存储数据的增加,计算量的增大,内存需求的增加,集群慢慢变大. 比如按照 ...

  8. 《Linux内核设计与实现》CHAPTER13阅读梳理

    <Linux内核设计与实现>第13章阅读总结 [edited by 5216lwr] 一.虚拟文件系统概述 1.虚拟文件系统 (也称作虚拟文件交换或VF)作为内核子系统,为用户空间程序提供 ...

  9. 用mac的terminal通过公私钥和ssh登录Linux

    刚开始使用mac,会觉得很难用,在网上找的方法也差强人意,经过自己的实践,找到下面这种方法,很好用,步骤也很简单 1.在mac本的个人目录下创建一个文件夹:.ssh.    在这个文件夹下使用ssh- ...

  10. C# MDI子窗体互相操作

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...