SpringBatch数据持久化到数据库还是内存?

 

 1.batch jobRepository 在配置作业仓库时候有2个类型

如果引用

org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean

则使用机器内存管理springbatch信息,容易内存溢出。

推荐使用

org.springframework.batch.core.repository.support.JobRepositoryFactoryBean

但是需要手动建库,用于存储springbatch基础信息

 

2.怎么手动建库(我这是mysql)

解压SpringBatch的core包,会有很多sql文件,找到对应数据库类型的,比如我 这里是

schema-mysql.sql,直接在数据库中建表。

注意:建表时候可能会遇到sql报错:Unknown storage engine ‘InnoDB‘,这是数据库使用的引擎不一样导致的。可以把这个sql文件中的ENGINE=’InnoDB’改为ENGINE=MyISAM; 全部替换后再次支持即可

3.怎么配置jobRepository

<bean id=”jobRepository” class=”org.springframework.batch.core.repository.support.JobRepositoryFactoryBean”>
<property name=”dataSource” ref=”dataSource”/>
<property name=”databaseType” value=”mysql”/>
<property name=”transactionManager” ref=”transactionManager”/>
</bean>

4.怎么改为使用内存管理batch的信息

<bean     id=”jobRepository” class=”org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean”>
<property name=”transactionManager” ref=”transactionManager”/>
</bean>

5.到这里,表生成了,数据存进去了,哪各个表存的是什么数据呢?

Table 1、BATCH_JOB_INSTANCE(作业实例表,存放JOB的实例信息)

字段名称 字段 类型 字段说明
JOB_INSTANCE_ID bigint 主键 ,作业实例编号,根据BATCH_JOB_SEQ自动生成
VERSION bigint 版本号
JOB_NAME varchar 作业名称 即在配置文件定义的JobId字段内容
JOB_KEY varchar 作业标识,根据作业参数序列化生成的标识,需要注意通过JOB_NAME+JOB_KEY

能够唯一区分一个作业实例

注意:JOB_KEY——如果同一个Job,则JOB_KEY一定不能相同,籍作业参数不能相同,如果不是同一个Job,JOB_KEY可以相同,也就是作业参数可以相同

Table 2、BATCH_JOB_EXECUTION_PARAMS(作业参数表,用于存放每个JOB执行的时候的参数信息,即对于的JOB实例)

字段名称   字段类型 字段说明  
JOB_EXECUTION_ID   bigint 外键ID,作业执行器ID编号,一个作业实例可能又会多行参数记录  
TYPE_CD   varchar 参数的类型,总共有四种 String、Date、Double、Long  
KEY_NAME   varchar 参数的名字  
STRING_VAL   varchar 参数如果是String,就存放String类型的参数值  
DATE_VAL   datetime 参数如果是Date,就存放Date类型的参数值  
LONG_VAL   bigint 参数如果是Long,就存放Long类型的参数值  
DOUBLE_VAL   double 参数如果是Double,就存放Double类型的参数值  
IDENTIFYING   char 用于标识作业参数是否标识作业实例  

Table 3、BATCH_JOB_EXECUTION(作业执行器表,存放当前作业的执行信息,创建时间、执行时间、执行结束时间、执行状态、执行Job实例等信息)

字段名称 字段类型 字段说明
JOB_EXECUTION_ID bigint 主键
VERSION bigint 版本号
JOB_INSTANCE_ID bigint 作业实例ID
CREATE_TIME datetime 作业执行器创建时间
START_TIME datetime 作业执行器开始执行时间
END_TIME datetime 作业执行器结束时间
STATUS varchar 作业执行器执行的状态:COMPLETED、FAILED、STARTING、UNKNOW等
EXIT_CODE varchar 作业执行器退出代码 如:UNKNOW、EXECUTING、COMPLETED等
EXIT_MESSAGE varchar 作业执行器退出信息,通常存放异常信息
LAST_UPDATED datetime 本条记录上次更新时间
JOB_CONFIGURATION_LOCATION varchar 作业配置文件的位置

运用BATCH_JOB_INSTANCE和BATCH_JOB_EXECUTION两张表联合查询Job信息

 

SELECT   bi.JOB_NAME,bi.JOB_KEY,be.CREATE_TIME,be.START_TIME,be.END_TIME,be.`STATUS`

FROM

batch_job_instance bi

LEFT JOIN batch_job_execution be ON bi.JOB_INSTANCE_ID = be.JOB_INSTANCE_ID

where bi.JOB_NAME=’billJob’

 

Table 4、BATCH_JOB_EXECUTION_ Table 1、(作业执行上下文表,存放上下文信息)

字段名称 字段类型 字段说明
JOB_EXECUTION_ID bigint 外键ID,作业执行器编号
SHORT_CONTEXT varchar 作业执行器上下文字符串格式
SERIALIZED_CONTEXT text 序列化的作业执行上下文

Table 5、BATCH_JOB_EXECUTION_SEQ表(用于BATCH_JOB_EXECUTION和BATCH_JOB_EXECUTION_CONTEXT提供主键生成)

Table 6、BATCH_JOB_SEQ表(用于BATCH_JOB_INSTNCE 和BATCH_JOB_EXECUTION_PARAMS提供主键生成)
Table 7、BATCH_STEP_EXECUTION(作业步执行器,存放每个Step执行器的信息:开始时间、执行完成时间、读/写次数等)

字段名称 字段类型 字段说明
STEP_EXECUTION_ID bigint  主键
VERSION bigint 版本
STEP_NAME varchar 作业步的名称
JOB_EXECUTION_ID bigint 作业执行器ID
START_TIME datetime 作业步执行器执行开始时间
END_TIME datetime 作业步执行器执行结束时间
STATUS varchar 作业步执行器执行状态
COMPLETED, STARTING, STARTED, STOPPING, STOPPED, FAILED, ABANDONED, UNKNOWN
存在于org.springframework.batch.core.BatchStatus
COMMIT_COUNT bigint 事务提交次数
READ_COUNT bigint 读数据次数
FILTER_COUNT bigint 过滤掉的数据次数
WRITE_COUNT bigint 写数据次数
READ_SKIP_COUNT bigint 读数据跳过的次数
WRITE_SKIP_COUNT bigint 写数据跳过的次数
PROCESS_SKIP_COUNT bigint 处理数据跳过的次数
ROLLBACK_COUNT bigint 事务回滚的次数
EXIT_CODE varchar 作业步执行器退出编码,状态码存在于org.springframework.batch.core.ExitStauts
EXIT_MESSAGE varchar 作业步执行器退出描述,一般是异常信息
LAST_UPDATED datetime 本条记录上次更新时间

Table 8、BATCH_STEP_EXECUTION_CONTEXT(作业步执行器上下文,存放作业步执行的上下文信息)

字段名称 字段类型 字段说明
STEP_EXECUTION_ID bigint 作业步执行器ID
SHORT_CONTEXT varchar 作业步执行器上下文字符串格式
SERIALIZED_CONTEXT text 序列化作业步执行器上下文

Table 9、BATCH_STEP_EXECUTION_SEQ(用于BATCH_STEP_EXECUTION和BATCH_STEP_EXECUTION_CONTEXT提供主键)

整理不易,转载请带上本文链接,谢谢、

本站的文章多是老王开发工作中问题的记录,一个字一个字敲的,切实可行,可以分享,需要留个原文链接,至少也意思意思吧!
vsalw技术博客! » SpringBatch数据持久化到数据库还是内存?

每个人都是以自己独特的方式体味生活,或许别人不理解,但自己知道:其中的酸甜苦辣就叫做幸福!

认同! 瞎扯淡!