Spring Batch学习笔记三:JobRepository
此系列博客皆为学习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的更多相关文章
- Spring Batch学习笔记二
此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自 ...
- spring batch学习笔记
Spring Batch是什么? Spring Batch是一个基于Spring的企业级批处理框架,按照我师父的说法,所有基于Spring的框架都是使用了spring的IoC特性,然后加上 ...
- Spring Batch学习笔记(一)
Spring Batch简介 Spring Batch提供了可重复使用的功能,用来处理大量数据.包括记录.跟踪,事务管理,作业处理统计,作业重启,跳过和资源管理. 此外还提供了更高级的技术服务和功能, ...
- spring cloud学习笔记三 Feign与Ribbon负载均衡的区别
一.Feign的介绍 Feign一般比较书面的解释是:Feign是一个声明式的WebService客户端,使用Feign编写的WebService客户端更加简单,他的使用方法是定义一个接口,然后在上线 ...
- Spring Boot学习笔记(三)实现热部署
pom文件中添加如下依赖即可 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...
- Spring Boot 学习笔记(六) 整合 RESTful 参数传递
Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...
- SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证
整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...
- 【转】Spring.NET学习笔记——目录
目录 前言 Spring.NET学习笔记——前言 第一阶段:控制反转与依赖注入IoC&DI Spring.NET学习笔记1——控制反转(基础篇) Level 200 Spring.NET学习笔 ...
- Spring MVC 学习笔记一 HelloWorld
Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...
随机推荐
- oracle优化
sql语句 优化方式: 1select 语句中避免用"*" oracle在解析时,会将“*”依次转换成所有的列名(数据字典完成)耗时 2尽量多用commit语句 及时提交,释放资源 ...
- CNUOJ 0576 加油
40017074加油 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 你需要驾驶一辆汽车行驶S个单位的距离.最开始汽车上有P个单 ...
- 用3D再现2D偶像的可爱,Cygames【偶像大师 灰姑娘女孩】开发示例
作为万代南梦宫娱乐的偶像养成游戏[偶像大师]的派生作品,是由Mobage创作的[偶像大师 灰姑娘女孩].这个游戏的最新作品,是现在累计下载突破1200万的大作,Android/iOS平台的 ...
- adv钓鱼题
4 10 4 5 6 2 10 2 10 4 5 6 2 10 2 60 1 20 29 20 50 20 60 1 20 20 20 60 20 #include<iostream> u ...
- 宿主机远程桌面连接vmware中的虚拟机
参考了:http://jingyan.baidu.com/article/3052f5a1e8c56397f21f8674.html 感谢~ 宿主机安装了vmware,vmware中安装虚拟机,怎 ...
- Windows下wnmp相关配置
#wnmp mysqld -install net start mysql memcached -d uninstall memcached -d install net start memcache ...
- 获取EMF文件内全部文字, 并按照左上到右下的顺序排序
因为工作要求, 需要对EMF文件文字内容做分析.....SO, 如下代码出现了 懒得加注释了, 反正对外接口属性就那么几个, 根据英文猜吧, 很容易的 说明一下: 这个东西结果会对所有文字内容按照左上 ...
- andriod逆向实验截图
- php token的生成
转载自:http://blog.snsgou.com/post-766.html --->非开放性平台 --->公司内部产品 接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的 ...
- 【OpenWRT】【RT5350】【一】OpenWrt开发环境搭建
[宿主机构建] 本人电脑配置如下: CPU: intel 酷睿 i3 3.3G 双核 内存: 金士顿 8G 硬盘:希捷 1TB 7200rpm 操作系统:win7 旗舰版 64位 OpenWrt是在 ...