Spring Batch学习(三)JobRepository

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,以便在将来重试的时候使用
时间: 2024-11-09 00:01:06

Spring Batch学习(三)JobRepository的相关文章

Spring Batch学习笔记三:JobRepository

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch Job在运行时有很多元数据,这些元数据一般会被保存在内存或者数据库中,由于Spring Batch在默认配置是使用HSQLDB,也就是说在Job的运行过程中,所有的元数据都被储存在内存中,在Job结束后会随着进程的结束自动消失:在这里我们推荐配置JobRepository去使用MySQL. 在这种情况下,Spring Batch在单次执行或者从一个执行到另外一个执行的时候会使用数据库去维护状态,Job执行的信息包

Spring Batch学习笔记二

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自定义的工作单元,它是Job的主要构件块:每一个Step由三部分组成:ItemReader.ItemProcessor.ItemWriter:这三个部分将执行在每一条被处理的记录上,ItemReader读取每一条记录,然后传递给ItemProcessor处理,最后交给ItemWriter做持久化:It

Spring Batch学习(二)架构

Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自定义的工作单元,它是Job的主要构件块:每一个Step由三部分组成:ItemReader.ItemProcessor.ItemWriter:这三个部分将执行在每一条被处理的记录上,ItemReader读取每一条记录,然后传递给ItemProcessor处理,最后交给ItemWriter做持久化:ItemProcessor不是必须的,一个Step可以仅仅包含

Spring Batch学习笔记——steps之间共享数据

名词说明: 上下文: 执行: 执行上下文: 案例: 警告:一旦steps共享数据,这些数据就会把这些steps连接起来.努力使steps独立.如果你实在是不能独立他们,才使用下面的技术.你应该把数据共享作为steps不能独立的后备方案. 1 数据共享方式: a step存储共享数据到数据库,receiving step从数据库读取他们 Execution context(执行上下文): 使用Spring  Batch execution context 作为data容器.a step往上下文写数

Spring Batch学习_ItemReaders and ItemWriters

All batch processing can be described in its most simple form as reading in large amounts of data, performing some type of calculation or transformation, and writing the result out. Spring Batch provides three key interfaces to help perform bulk read

Spring Batch学习

今天准备研究下Spring Batch,然后看了一系列资料,如下还是比较好的教程吧. 链接: http://www.cnblogs.com/gulvzhe/archive/2011/12/20/2295090.html 但在进行到 Spring Batch 之 Sample(CSV文件操作)(四) 时,发现了实战中的问题: outputFile.csv死活写不进结果!!! 想来想去,也尝试了n种调试,确定reader和process绝对没问题,那就writer出现问题了. 所以肯定是配置的csv

Spring Batch学习(一)介绍

为什么我们需要批处理? 我们不会总是想要立即得到需要的信息,批处理允许我们在请求处理之前就一个既定的流程开始搜集信息:比如说一个银行对账单,我们可以按月生成,并在用户查询之前开启一个批处理流程进行处理: 有时候它能让生意做得更好:比如说在线购物时,并不是说你买了一个产品零售商就立即发货,而是四五个小时后,统一发货: 更好的利用资源:让应该利用的处理能力闲置起来是一个大的浪费,我们可以定制处理让一个机器一个接一个的运行Job可以更好的利用机器的处理能力: 什么是批处理? 批处理是指在没有与用户进行

Spring batch学习 持久化表结构详解(2)

#接上一篇 这一篇讲一下持久化需要表 batch_job_execution, batch_job_execution_context, batch_job_execution_params, batch_job_execution_seq, batch_job_instance, batch_job_seq, batch_step_execution, batch_step_execution_context, batch_step_execution_seq _seq结尾的三张表,维护bat

Spring基础学习(三)—详解Bean(下)

一.Bean的生命周期 1.概述      Spring IOC容器可以管理Bean的生命周期,Spring 允许在Bean的生命周期的特定点执行定制的任务.      Spring IOC容器对Bean的生命周期进行管理的过程:      (1)通过构造器或工厂方法创建Bean实例.      (2)为Bean的属性设置值和对其他Bean的引用.      (3)调用Bean的初始化方法.      (4)Bean可以使用了.      (5)当容器关闭时,调用Bean的销毁方法.