文 / 朱季谦
Activiti 工作流引擎自带了一套数据库表, 这里面有一个需要注意的地方:
低于 5.6.4 的 MySQL 版本不支持时间戳或毫秒级的日期. 更糟糕的是, 某些版本在尝试创建此类列时将引发异常, 而其他版本则不会. 执行自动创建 / 升级时, 引擎将在执行 DDL 时更改它. 使用 DDL 文件方法时, 既可以使用常规版本也可以使用其中带有 mysql55 的特殊文件(这适用于低于 5.6.4 的任何版本). 后一个文件将具有没有毫秒精度的列类型.
笔者曾经在 5.6.0 版本做过试验, 发现是无法自动生成 23 张表的, 但在 5.6.4 版本以上便可, 因此, 最好保证 MySQL 版本在 5.6.4 以上.
一. 数据库表名称说明
Activiti 的数据库表分 5 大部分, 名称以 ACT 开头, 第二部分是表用例的两个字符的标志, 该用例与服务 API 的大致匹配:
二. ACT_GE_ * 通用数据表
通用数据表用于存放一些通用的数据, 这些表本身不关心特定的流程或者业务, 只用于存放这些业务或者流程所使用的资源. 通用数据表有两个, 分别是 ACT_GE_BYTEARRAY 与 ACT_GE_PROPERTY, 它们都是以 ACT_GE_* 开头的.
2.1 ACT_GE_BYTEARRAY 资源表
表 ACT_GE_BYTEARRAY 资源表用于保存于流程引擎相关的资源, 流程文件进行部署时, 流程定义的图片以及 xml 文件等数据, 都会转换成 byte 数组保存到这个表中. 该表设计了一个 byte 字段, 用来保存资源的内容, 该表包含以下字段:
注: Activiti 为了保证整个流程引擎表中所产生的数据主键在整个流程引擎中是唯一的, 使用了一个 DbIdGenerator 类生成主键, 该类中保存了下一条数据的 ID 值和当前 ID 块最后一个 ID 值.
2.2 ACT_GE_PROPERTY 属性表
Activiti 将全部的属性抽象为 key-value 对, 每个属性都有名称和值.
注: 在初始化流程数据库时, 会默认加入 3 条属性数据: next.dbid,schema.history 和 schema.version.
next.dbid: 属性值为 1 时, 表示 Activiti 数据库表 ID 生成时, 当前 ID 块最大值为 1(即数据库里还没有任何数据). 前面也提到, 流程引擎是使用一个 DbIdGenerator 类来生成主键的, 该类保存了下一条数据的 ID 值和当前 ID 块的最后一个 ID 值, 所谓 ID 块就是 Activiti 数据产生时 ID 值时, 就会从 1 开始到 101 进行取值作为数据 ID, 那么该 ID 块的最大值为 101.DbIdGenerator 在产生数据 ID 时, 会判断当前 ID 值是否大于 101(ID 块最大值). 如果大于, 则请求重新生成一个 ID 块, 那么此时属性中的 next.dbid 属性值将会为 201.
schema.history: 属性表示数据表结构的更新历史, 例如 --
create(5.22.0.0)即表示使用了 5.22 版本的初始化脚本创建.
schema.version: 表示当前 Activiti 数据结构的版本.
三. ACT_RE_ * 流程存储表
存储表名称以 ACT_RE 开头, RE 是 repository 单词的前两个字母, 流程使用存储表来保存流程定义和部署信息相关的数据.
3.1.ACT_RE_DEPLOYMENT 部署数据表
在流程引擎中, 一次部署可以添加多个资源, 即可以有图片与 xml 之类的资源, 这些资源数据会保存到资源表(ACT_GE_BTYEARRAY), 剩余部署信息, 则保存到部署表中, 部署名为 ACT_RE_DEPLOYMENT, 包含以下三个字段:
3.2.ACT_RE_PROCDEF 流程定义表
Activiti 在部署流程文件时 (.bpmn 或者. bpmn20.xml), 其除了会将内容保存到资源表外, 还会解析流程文件的内容, 形成特定的流程定义数据, 写入到流程定义表(ACT_RE_PROCDEF) 中, 该表包含了以下的字段:
注: 该表的主键与其他数据表不同的是, ACT_RE_PROCDEF 表的主键是组合主键, 其值为流程定义的 KEY_字段值加流程定义的 VERSION_字段值再加 ID 生成器生成的 ID 值, 其中这三个值以冒号为分隔符. 例如, KEY_值为 baoxiaoProcess,VERSION_值为 1,ID 生成器生成的 ID 值为 722504, 则该主键为 baoxiaoProcess:1:722504, 如以下截图所示:
四. ACT_ID_ * 身份数据表
Activiti 的整个身份证数据模块, 可以独立于流程引擎而存在, 身份数据表并没有保存流程相关的数据以及关联, 身份表名称使用 ACT_ID 关联, ID 是单词 identity 的前两个字母.
4.1.ACD_ID_USER 用户表
流程引擎用户的信息被保存在 ACT_ID_USER 表中, 该表有以下字段:
4.2.ACD_ID_GROUP 用户组表
使用 ACT_ID_GROUP 表来保存用户组的数据, 该表有以下几个字段:
4.3.ACD_ID_MEMBERSHIP 关系表
关系表用来描述用户表与用户组表的对应关系:
注: 该表的两个字段均做了外键约束, 写入该表的数据时, 必须要有用户和用户组数据与之关联.
五. ACT_RU_ * 运行时数据表
运行时数据表用来保存流程在运行过程中所产生的数据, 例如流程实例, 执行流和任务等, 以 ACT_RU 开头, RU 是单词 runtime 的前两个字母.
5.1.ACT_RU_EXECUTION 流程实例表
流程启动后, 会产生一个流程实例, 同时产生相应的执行流, 流程实例和执行流数据均被保存在 ACT_RU_EXECUTION 表中. 如果一个流程实例只要一条执行流, 那么该表中只产生一条数据, 该数据既表示执行流, 也表示流程实例.
5.2.ACT_RU_TASK 流程任务表
流程在运行过程中所产生的任务数据保存在 ACT_RU_TASK, 字段如下:
5.3.ACT_RU_VARIABLE 流程参数表
流程引擎提供了 ACT_RU_VARIABLE 表来存放流程中的参数, 这类参数包括流程实例参数, 执行流参数和任务参数, 各参数可以有多种类型.
5.4.ACT_RU_IDENTITYLINK 流程与身份关系表
用户组与用户之间存在的关系, 使用 ACT_ID_MEMBERSHIP 表保存. 用户或者用户组与流程数据之间的关系, 则使用 ACT_RU_IDENTITYLINK 表进行保存.
5.5.ACT_RU_JOB 工作数据表
在流程执行的过程中, 会有一些工作需要定时或者重复执行, 这类工作数据被保存到 ACT_RU_JOB 表中.
5.6.ACT_RU_EVENT_SUBSCR 事件描述表
如果流程到达某类事件节点, Activiti 会往 ACT_RU_EVENT_SUBSCR 表中加入事件描述数据, 这些事件描述数据将会决定流程事件的触发.
六. ACT_HI_ * 历史数据表
历史数据表就像流程引擎的日志表. 被操作过的流程元素, 将会被记录到李四表中. 历史表名称以 ACT_HI 开头, HI 是单词 history 的前两个字母.
6.1.ACT_HI_PROCINST 流程实例表
流程实例的历史数据会被保存到 ACT_HI_PROCINST 表中, 只要流程启动, Activiti 就会将流程实例的数据写入 ACT_HI_PROCINST 表中. 除了基本的流程字段外, 与运行时数据表不同的是, 历史流程实例表还会记录流程的开始活动 ID 的, 活动结束 ID 等信息.
6.2.ACT_HI_ACTINST 历史行为表
历史行为表会记录每一个流程活动的实例, 一个 流程活动将会被记录成一条数据, 例如, 流程中有开始事件, 用户任务, 结束事件各一个, 当流程结束后, 该表就会产生 3 条历史行为数据.
6.3. 附件表 ACT_HI_ATTACHMENT
使用任务服务 (TaskService) 的 API, 可以添加附件, 这些附件数据将会保存到 ACT_HI_ATTACHMENT 表中.
6.4. 评论表 ACT_HI_COMMENT
可以专门存放审批过程中的评论数据.
来源: https://www.cnblogs.com/zhujiqian/p/11966455.html