Spring Batch 数据库概论
Spring Batch提供了表初始化的语句,并支持了多种常见的数据库,我们可以在配置文件中设置 spring.batch.initialize-schema 的值来指定对数据库的操作。
- embedded:如果不存在,创建一个空的库
- always:每次都重新创建新的库
- never:从不创建新的库
默认的数据库文件地址在 /spring-batch-core-4.1.2.RELEASE.jar!/org/springframework/batch/core/schema-*.sql,根据不同的数据库类型,执行相应的脚本。
?
我们还可以通过 spring.batch.schema 指定SQL脚本的路径,通过 spring.batch.table-prefix 设置数据库表的前缀,默认是BATCH_ 开头。
#设置schema脚本的路径 spring.batch.schema=org/springframework/batch/core/schema-mysql.sql #设置表前缀 spring.batch.table-prefix=BATCH
数据库表概论
执行完上边的脚本我们在数据库可以看到下边一个数据库表列表:
?
这些表可以分为三类:
- JobInstance
- BATCH_JOB_SEQ
- BATCH_JOB_INSTANCE
- JobExecution
- BATCH_JOB_EXECUTION
- BATCH_JOB_EXECUTION_CONTEXT
- BATCH_JOB_EXECUTION_PARAMS
- BATCH_JOB_EXECUTION_SEQ
- StepExecution
- BATCH_STEP_EXECUTION
- BATCH_STEP_EXECUTION_CONTEXT
- BATCH_JOB_EXECUTION_SEQ
?
数据库表详细介绍
BATCH_JOB_EXECUTION
?
- job_execution_id: Job的执行ID,表主键
- version:当前记录被修改的次数,控制并发
- job_instance_id:Job 实例ID,同一个实例可能对应多条执行记录,但是一般只会对应一条执行成功记录,默认情况下JobName+参数 确定唯一的Job实例。
- create_time:记录创建时间
- start_time:Job开始执行时间
- end_time:Job结束执行时间
- status:执行状态
- exit_code:退出码
- exit_message:退出信息
- last_update:最后更新日期
- job_configuration_location:
BATCH_JOB_EXECUTION_CONTEXT
Batch执行上下文,记录batch执行中放入的一些参数数据
?
BATCH_JOB_EXECUTION_PARAMS
Job执行参数表,在Launch 一个Job的时候同时会传入一个Job参数的实例。
?
- Job_Execution_id: Job执行记录主键
- Type_Cd: 参数类型,LONG/STRING/DATE/DOUBLE
- Key_Name: 参数名
- String_Val: 字符串参数值
- Date_Val: 时间参数值
- Long_Val: 整数参数值
- Double_Val: 浮点数参数值
- Identifying: 是否用于标识Job实例
BATCH_JOB_EXECUTION_SEQ
Job执行表的Sequence表
?
BATCH_JOB_INSTANCE
Job实例表
?
BATCH_JOB_SEQ
?
BATCH_STEP_EXECUTION
?
- Step_Execution_Id: Step 执行主键
- Version:本条记录被更新次数,主要是用于并发
- Step_Name: Step 名称
- Job_Execution_id: Step 对应的Job执行Id
- Start_time: Step 开始时间
- End_time: Step结束时间
- Status: Step 状态
- Commit_Count: Step 已经提交的次数
- Read_Count: Step 已经执行的Reader次数
- Filter_Count:
- Writer_Count: 已经执行的Writer 次数
- Read_Ship_Count: Reader 跳过次数
- Writer_Skip_Count: Writer 跳过次数
- Process_Skip_Count: Processor跳过次数
- Rollback_Count: 回滚次数
- Exit_Code: 推出Code
- Exit_Message: 推出信息
- Last_UpdateD: 最后更新时间
BATCH_STEP_EXECUTION_CONTEXT
?
BATCH_JOB_EXECUTION_SEQ
?
写在后边的话
Spring Batch 最为一个非常主流的批处理框架,大家关心的一般都是如何使用好他,所以平常了解的都是如何使用。但是使用中遇到的问题的时候,才会去看源码,或者去查数据库,也就是这个时候才能体现出一个牛逼的程序员和一个码农的区别。
鹏哥在平台的工作中跟别人吵架,好少能吵赢过,究其原因就是对一个技术一瓶子不满,半瓶子咣当。所以鹏哥死磕Spring Batch,在这里发表一个系列,虽然鹏哥内心也知道对于这种相对冷门的技术,只有真正用的人才会去看,去了解,但是我还是说服自己要写这个系列,就是为了一个在跟别人吵Spring Batch的时候,我说一,别人不会说二。