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数据库表概论
执行完上边的脚本我们在数据库可以看到下边一个数据库表列表:
这些表可以分为三类:
JobInstanceBATCH_JOB_SEQBATCH_JOB_INSTANCEJobExecutionBATCH_JOB_EXECUTIONBATCH_JOB_EXECUTION_CONTEXTBATCH_JOB_EXECUTION_PARAMSBATCH_JOB_EXECUTION_SEQStepExecutionBATCH_STEP_EXECUTIONBATCH_STEP_EXECUTION_CONTEXTBATCH_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/DOUBLEKey_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执行IdStart_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: 推出CodeExit_Message: 推出信息Last_UpdateD: 最后更新时间BATCH_STEP_EXECUTION_CONTEXT
BATCH_JOB_EXECUTION_SEQ
写在后边的话
Spring Batch 最为一个非常主流的批处理框架,大家关心的一般都是如何使用好他,所以平常了解的都是如何使用。但是使用中遇到的问题的时候,才会去看源码,或者去查数据库,也就是这个时候才能体现出一个牛逼的程序员和一个码农的区别。
鹏哥在平台的工作中跟别人吵架,好少能吵赢过,究其原因就是对一个技术一瓶子不满,半瓶子咣当。所以鹏哥死磕Spring Batch,在这里发表一个系列,虽然鹏哥内心也知道对于这种相对冷门的技术,只有真正用的人才会去看,去了解,但是我还是说服自己要写这个系列,就是为了一个在跟别人吵Spring Batch的时候,我说一,别人不会说二。