此系列博客皆为学习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. session在本地可以正常使用,而在sae上却无法使用或者值为空的解决方法

    session在本地可以正常使用,而在sae上却无法使用或者值为空的解决方法: session_start()放在当前页代码的第一行即可解决该问题. 在本地上session_start()如果不是放在 ...

  2. Android 四大护法之一 Service

    1.Service的概念 Service是Android 四大组件之一,是默认没有界面的运行于后台的服务程序.Service的开启方式分为启动式服务(startService)和绑定式服务(bindS ...

  3. linux常用命令(二)

    文件处理命令接上一篇 cat concatenate and display fils 查看小文件 more分页显示文件 空格或者f翻页,回车下一行,Q或q退出. head –num  num代表行数 ...

  4. bzoj 4503 两个串

    Description 兔子们在玩两个串的游戏.给定两个字符串S和T,兔子们想知道T在S中出现了几次, 分别在哪些位置出现.注意T中可能有“?”字符,这个字符可以匹配任何字符. Input 两行两个字 ...

  5. PHPExcel中文开发手册翻译版(1)

    请注意这个是粗翻译版,仅供参考,不是精校版 精校版后面才会更新 英文原版在线文档 https://github.com/PHPOffice/PHPExcel/wiki/User%20Documenta ...

  6. java设计模式

    五种创建型模式: 1.工厂模式 普通工厂模式: 工厂类提供一个方法可以生产多种实现了某种接口的类 多方法工厂模式: 一个方法对应一个要生产的类 静态工厂模式: 静态方法来生产类 2.抽象工厂模式 工厂 ...

  7. PhpStorm 10 破解方法

    最新版PhpStorm 10正式版改进了PHP 7支持,改进代码完成功能. PhpStorm 是最好的PHP开发工具,使用它进行PHP开发将会让你感觉到编程的乐趣. 快乐无极终于从oschina看到了 ...

  8. php-fpm重启关闭等操作

    php-fpm 启动:/usr/sbin/php-fpmphp-fpm 关闭:kill -INT `cat /var/run/php-fpm.pid`php-fpm 重启:kill -USR2 `ca ...

  9. poj3740

    #include<stdio.h>#include<iostream>int map[16][300];int vistx[16];int visty[300];int zhe ...

  10. Xamarin.Android 应用程序配置

    * 在 Xamarin 中 Android 清单文件的内容一般不通过手动编辑,而是由编译器根据 项目属性设置 和 一系列 特性类 自动生成 1. 应用程序在android启动器中显示的名称设置: 主活 ...