对于最新稳定版本,请使用Spring Batch Documentation 6.0.0spring-doc.cadn.net.cn

元数据模式

概述

Spring Batch 元数据表与代表它们的域对象非常匹配 Java。例如JobInstance,作业执行,作业参数步执行映射到BATCH_JOB_INSTANCE,BATCH_JOB_EXECUTION,BATCH_JOB_EXECUTION_PARAMSBATCH_STEP_EXECUTION分别。执行上下文两者的映射BATCH_JOB_EXECUTION_CONTEXTBATCH_STEP_EXECUTION_CONTEXT.这JobRepository是 负责将每个 Java 对象保存并存储到其正确的表中。本附录 详细描述了元数据表,以及许多设计决策 在制作它们时就已经被制造出来了。在查看描述的各种表格创建语句时 在本附录后面请注意,所用的数据类型尽可能通用。Spring 批处理提供了许多模式示例。它们的数据类型各不相同,原因包括 各数据库厂商处理数据类型的差异。下图 展示了六个表及其相互关系的ERD模型:spring-doc.cadn.net.cn

春季批处理元数据 ERD
图1。春季批处理元数据 ERD

DDL 脚本示例

Spring Batch Core JAR文件包含创建关系表的示例脚本 对于多个数据库平台(这些平台又被作业自动检测) 仓库工厂豆或等价命名空间)。这些文字可以直接使用,或者 根据需要添加额外的索引和约束。文件名在 形式schema-*.sql,其中是目标数据库平台的简称。 脚本都在包里*org.springframework.batch.core.spring-doc.cadn.net.cn

迁移DDL脚本

Spring Batch 提供了迁移 DDL 脚本,升级版本时需要执行这些脚本。 这些脚本可在Core Jar文件中找到,内容如下org/springframework/batch/core/migration. 迁移脚本按引入版本号组织到文件夹中:spring-doc.cadn.net.cn

版本

本附录中讨论的许多数据库表都包含版本列。这 列很重要,因为春批采用了乐观锁定策略,当 处理数据库更新。这意味着每次“触摸记录”时 (更新),版本列中的值会递增一。当仓库消失时 为了保存值,如果版本号变了,它会抛出OptimisticLockingFailureException,表明存在并发错误 访问。这种检查是必要的,因为即使不同的批处理作业可能在运行 在不同的机器中,它们都使用相同的数据库表。spring-doc.cadn.net.cn

身份

BATCH_JOB_INSTANCE,BATCH_JOB_EXECUTIONBATCH_STEP_EXECUTION每个包含 列以_ID.这些字段作为各自表的主键。 然而,它们并不是数据库生成的密钥。相反,它们是由独立生成的 序列。这是必要的,因为在将其中一个域对象插入到 database,它所获得的键需要在实际对象上设置,这样它们才能 在爪哇中唯一标识。较新的数据库驱动(JDBC 3.0及以上版本)支持此功能 带有数据库生成密钥的功能。不过,与其要求这个功能, 使用序列。每种模式变体都包含以下某种形式 语句:spring-doc.cadn.net.cn

CREATE SEQUENCE BATCH_STEP_EXECUTION_SEQ;
CREATE SEQUENCE BATCH_JOB_EXECUTION_SEQ;
CREATE SEQUENCE BATCH_JOB_SEQ;

许多数据库厂商不支持序列。在这种情况下,会采用一些变通方法, 例如针对 MySQL 的以下语句:spring-doc.cadn.net.cn

CREATE TABLE BATCH_STEP_EXECUTION_SEQ (ID BIGINT NOT NULL) type=InnoDB;
INSERT INTO BATCH_STEP_EXECUTION_SEQ values(0);
CREATE TABLE BATCH_JOB_EXECUTION_SEQ (ID BIGINT NOT NULL) type=InnoDB;
INSERT INTO BATCH_JOB_EXECUTION_SEQ values(0);
CREATE TABLE BATCH_JOB_SEQ (ID BIGINT NOT NULL) type=InnoDB;
INSERT INTO BATCH_JOB_SEQ values(0);

在前述情况下,每个序列使用一个表代替。春季核心课程,MySQLMaxValueIncrementer然后将该序列中的一列递增为 提供类似的功能。spring-doc.cadn.net.cn

BATCH_JOB_INSTANCE桌子

BATCH_JOB_INSTANCE表格包含所有与 相关的信息JobInstance和 担任整体等级的顶端。使用以下通用DDL语句 要创造它:spring-doc.cadn.net.cn

CREATE TABLE BATCH_JOB_INSTANCE  (
  JOB_INSTANCE_ID BIGINT  PRIMARY KEY ,
  VERSION BIGINT,
  JOB_NAME VARCHAR(100) NOT NULL ,
  JOB_KEY VARCHAR(32) NOT NULL
);

以下列表描述了表格中的每一列:spring-doc.cadn.net.cn

  • JOB_INSTANCE_ID:识别实例的唯一ID。它也是初级学校 钥匙。该列的值应通过调用getId(获取识别)方法JobInstance.spring-doc.cadn.net.cn

  • 版本:见版本spring-doc.cadn.net.cn

  • JOB_NAME: 从中获得的职位名称工作对象。因为这是必须的 识别实例,不能是空的。spring-doc.cadn.net.cn

  • JOB_KEY:序列化作业参数唯一标识分离的 同一任务的实例相互引用。(JobInstances必须使用相同的职位名称 有不同的作业参数因此,也不同JOB_KEY价值观)。spring-doc.cadn.net.cn

BATCH_JOB_EXECUTION_PARAMS桌子

BATCH_JOB_EXECUTION_PARAMS表格包含所有与作业参数对象。它包含0对或更多键值对传递给工作和 作为运行作业参数的记录。对于每个参数 对工作身份的生成有贡献,识别标记设置为 true。 注意,该表已被非归一化。而不是为每个人单独创建一个表格 有一个表,带有一列表示类型,如下 列表节目:spring-doc.cadn.net.cn

CREATE TABLE BATCH_JOB_EXECUTION_PARAMS  (
	JOB_EXECUTION_ID BIGINT NOT NULL ,
	PARAMETER_NAME VARCHAR(100) NOT NULL ,
	PARAMETER_TYPE VARCHAR(100) NOT NULL ,
	PARAMETER_VALUE VARCHAR(2500) ,
	IDENTIFYING CHAR(1) NOT NULL ,
	constraint JOB_EXEC_PARAMS_FK foreign key (JOB_EXECUTION_ID)
	references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
);

以下列表描述了每列:spring-doc.cadn.net.cn

注意,该表没有主键。这是因为该框架没有 使用时,因此不需要它。如果需要,你可以添加主键 使用数据库生成的密钥,且不会对框架本身造成任何问题。spring-doc.cadn.net.cn

BATCH_JOB_EXECUTION桌子

BATCH_JOB_EXECUTION表格包含所有与作业执行对象。每一次工作运行时,总会有新的 被调用作业执行以及新的一行 这张桌子。以下列表展示了BATCH_JOB_EXECUTION桌子:spring-doc.cadn.net.cn

CREATE TABLE BATCH_JOB_EXECUTION  (
  JOB_EXECUTION_ID BIGINT  PRIMARY KEY ,
  VERSION BIGINT,
  JOB_INSTANCE_ID BIGINT NOT NULL,
  CREATE_TIME TIMESTAMP NOT NULL,
  START_TIME TIMESTAMP DEFAULT NULL,
  END_TIME TIMESTAMP DEFAULT NULL,
  STATUS VARCHAR(10),
  EXIT_CODE VARCHAR(20),
  EXIT_MESSAGE VARCHAR(2500),
  LAST_UPDATED TIMESTAMP,
  constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID)
  references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID)
) ;

以下列表描述了每列:spring-doc.cadn.net.cn

  • JOB_EXECUTION_ID: 唯一标识该执行的主键。的价值 该列可通过调用getId(获取识别)方法作业执行对象。spring-doc.cadn.net.cn

  • 版本:见版本spring-doc.cadn.net.cn

  • JOB_INSTANCE_ID:来自BATCH_JOB_INSTANCE桌子。它表示 该处决所属的实例。每个执行可能会有多个执行 实例。spring-doc.cadn.net.cn

  • CREATE_TIME:时间戳表示执行创建的时间。spring-doc.cadn.net.cn

  • START_TIME:时间戳表示执行开始的时间。spring-doc.cadn.net.cn

  • END_TIME: 表示执行结束的时间戳,无论 成功或失败。当作业当前未运行时,该列为空值 表示存在某种错误,框架无法运行 失败前的最后一次存档。spring-doc.cadn.net.cn

  • 地位: 表示执行状态的字符串。这可能是完成,开始,以及其他。该列的对象表示为批处理状态列举。spring-doc.cadn.net.cn

  • EXIT_CODE: 表示执行出口代码的字符字符串。在 命令行作业中,这可以转换为数字。spring-doc.cadn.net.cn

  • EXIT_MESSAGE:字符字符串表示更详细的描述 工作退出。在故障的情况下,这可能包括与栈跟踪一样多的部分 可能。spring-doc.cadn.net.cn

  • LAST_UPDATED: 时间戳表示该执行最后一次被持久化的时间。spring-doc.cadn.net.cn

BATCH_STEP_EXECUTION桌子

BATCH_STEP_EXECUTION表格包含所有与步执行对象。该表在许多方面与BATCH_JOB_EXECUTION桌子,在那里 总是至少每个 有一次每个作业执行创建。如下 列表展示了BATCH_STEP_EXECUTION桌子:spring-doc.cadn.net.cn

CREATE TABLE BATCH_STEP_EXECUTION  (
  STEP_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY ,
  VERSION BIGINT NOT NULL,
  STEP_NAME VARCHAR(100) NOT NULL,
  JOB_EXECUTION_ID BIGINT NOT NULL,
  CREATE_TIME TIMESTAMP NOT NULL,
  START_TIME TIMESTAMP DEFAULT NULL ,
  END_TIME TIMESTAMP DEFAULT NULL,
  STATUS VARCHAR(10),
  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(20) ,
  EXIT_MESSAGE VARCHAR(2500) ,
  LAST_UPDATED TIMESTAMP,
  constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID)
  references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
) ;

以下列表描述了每列:spring-doc.cadn.net.cn

  • STEP_EXECUTION_ID: 唯一标识该执行的主键。的价值 该列应通过调用getId(获取识别)方法步执行对象。spring-doc.cadn.net.cn

  • 版本:见版本spring-doc.cadn.net.cn

  • STEP_NAME:该执行所属步骤的名称。spring-doc.cadn.net.cn

  • JOB_EXECUTION_ID:来自BATCH_JOB_EXECUTION桌子。它表示作业执行对此步执行是。可能只有一个步执行对于给定的作业执行对于给定的名字。spring-doc.cadn.net.cn

  • START_TIME:时间戳表示执行开始的时间。spring-doc.cadn.net.cn

  • END_TIME: 表示执行完成的时间点,无论如何 成功或失败。该列中出现空值,尽管作业本身并非空值 当前运行,表明存在某种错误,框架本身 无法在失败前进行最后一次存档。spring-doc.cadn.net.cn

  • 地位: 表示执行状态的字符串。这可能是完成,开始,以及其他。该列的对象表示为批处理状态列举。spring-doc.cadn.net.cn

  • COMMIT_COUNT: 该步骤提交交易的次数 在这次处决中。spring-doc.cadn.net.cn

  • READ_COUNT:执行过程中读取的项目数量。spring-doc.cadn.net.cn

  • FILTER_COUNT:从这次执行中筛选出的物品数量。spring-doc.cadn.net.cn

  • WRITE_COUNT:执行过程中写入并提交的项目数量。spring-doc.cadn.net.cn

  • READ_SKIP_COUNT: 此执行过程中跳过的读入项目数量。spring-doc.cadn.net.cn

  • WRITE_SKIP_COUNT: 此执行中写入时跳过的项目数量。spring-doc.cadn.net.cn

  • PROCESS_SKIP_COUNT:处理过程中跳过的项目数量 执行。spring-doc.cadn.net.cn

  • ROLLBACK_COUNT:执行过程中回滚的次数。注意,这个计数 包括每次回滚发生的时间,包括重试回滚和跳过的 恢复程序。spring-doc.cadn.net.cn

  • EXIT_CODE: 表示执行出口代码的字符字符串。在 命令行作业中,这可以转换为数字。spring-doc.cadn.net.cn

  • EXIT_MESSAGE:字符字符串表示更详细的描述 工作退出。在故障的情况下,这可能包括与栈跟踪一样多的部分 可能。spring-doc.cadn.net.cn

  • LAST_UPDATED: 时间戳表示该执行最后一次被持久化的时间。spring-doc.cadn.net.cn

BATCH_JOB_EXECUTION_CONTEXT桌子

BATCH_JOB_EXECUTION_CONTEXT表格包含所有与执行上下文工作.正好有一个工作 执行上下文每个作业执行它包含了某一特定所需的所有作业级数据 任务执行。这些数据通常代表在 失败,因此JobInstance可以“从中断的地方开始”。如下 列表展示了BATCH_JOB_EXECUTION_CONTEXT桌子:spring-doc.cadn.net.cn

CREATE TABLE BATCH_JOB_EXECUTION_CONTEXT  (
  JOB_EXECUTION_ID BIGINT PRIMARY KEY,
  SHORT_CONTEXT VARCHAR(2500) NOT NULL,
  SERIALIZED_CONTEXT CLOB,
  constraint JOB_EXEC_CTX_FK foreign key (JOB_EXECUTION_ID)
  references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
) ;

以下列表描述了每列:spring-doc.cadn.net.cn

BATCH_STEP_EXECUTION_CONTEXT桌子

BATCH_STEP_EXECUTION_CONTEXT表格包含所有与执行上下文.正好有一个执行上下文步执行,且包含所有 需要在特定步骤执行时持久化。这些数据通常代表 必须在失败后恢复状态,使得JobInstance可以“开始” 从它结束的地方。”以下列表展示了BATCH_STEP_EXECUTION_CONTEXT桌子:spring-doc.cadn.net.cn

CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT  (
  STEP_EXECUTION_ID BIGINT PRIMARY KEY,
  SHORT_CONTEXT VARCHAR(2500) NOT NULL,
  SERIALIZED_CONTEXT CLOB,
  constraint STEP_EXEC_CTX_FK foreign key (STEP_EXECUTION_ID)
  references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID)
) ;

以下列表描述了每列:spring-doc.cadn.net.cn

归档

由于每次运行批处理作业时,多个表中都有条目,因此很常见 为元数据表制定归档策略。桌子本身是经过设计的 展示过去发生的事情记录,通常不影响任何项目的运行 工作,除了与重启相关的几个显著例外:spring-doc.cadn.net.cn

  • 该框架利用元数据表来判断某一特定JobInstance此前已有人主持。如果任务已经运行且作业不可重启,则 例外被提出。spring-doc.cadn.net.cn

  • 如果是JobInstance在未成功完成的情况下被移除, 框架认为这份工作是新的,而不是重新开始。spring-doc.cadn.net.cn

  • 如果作业被重启,框架会使用所有已持久化到该项目的数据执行上下文以恢复乔布的州。因此,移除了 此表显示未成功完成的任务阻止它们从以下 如果再次运行,正确的点。spring-doc.cadn.net.cn

国际字符和多字节字符

如果你在业务中使用多字节字符集(比如中文或西里尔字母) 处理中,这些字符可能需要在 Spring Batch 架构中持久化。 许多用户发现,只需将模式长度加倍即可瓦尔查尔列数就足够了。另一些人则更倾向于配置作业仓库最大变长一半 的值瓦尔查尔列长。一些用户还报告他们使用NVARCHAR代替瓦尔查尔在他们的模式定义中。最佳结果取决于 数据库平台以及数据库服务器的本地配置方式。spring-doc.cadn.net.cn

关于元数据表索引的建议

Spring Batch 为核心jar文件中的元数据表提供了DDL样本 有几个常见的数据库平台。该DDL中不包含索引声明, 因为用户想要索引的方式有太多变化,取决于他们的 具体平台、本地大会以及工作内容的商业需求 操作。下表提供了哪些列将 被用于哪里Spring Batch提供的DAO实现及其相关方式 它们通常被用来让各个项目自行做出决定 关于索引:spring-doc.cadn.net.cn

表1。其中 SQL 语句中的子句(不包括主键)及其大致使用频率。

默认表名称spring-doc.cadn.net.cn

其中条款spring-doc.cadn.net.cn

频率spring-doc.cadn.net.cn

BATCH_JOB_INSTANCEspring-doc.cadn.net.cn

JOB_NAME = ?JOB_KEY = ?spring-doc.cadn.net.cn

每次有工作上线spring-doc.cadn.net.cn

BATCH_JOB_EXECUTIONspring-doc.cadn.net.cn

JOB_INSTANCE_ID = ?spring-doc.cadn.net.cn

每次重启作业spring-doc.cadn.net.cn

BATCH_STEP_EXECUTIONspring-doc.cadn.net.cn

版本 = ?spring-doc.cadn.net.cn

在提交间隔,也称为块(以及在 的开始和结束处) 步进)spring-doc.cadn.net.cn

BATCH_STEP_EXECUTIONspring-doc.cadn.net.cn

STEP_NAME = ?JOB_EXECUTION_ID = ?spring-doc.cadn.net.cn

在每一步执行之前spring-doc.cadn.net.cn