概述
在流程的产生、执行及结束等周期,都会产生各种与流程相关的数据,Activiti提供了一整套数据表来保存这些数据。
Activiti流程引擎的数据表分为5大类,每一类的数据表均有不同的职责,Avtiviti为数据表的命名制定了规范,不同职责的数据表均可以通过命名来体现,例如运行时数据表会以act_run
作为开头,历史数据表以act_hi
作为开头等
通用数据表
通用数据表用于存放一些通用的数据,这些表本身不关心特定的流程或者业务,只保存这些业务或者流程所使用的通用资源。
它可以独立存在于流程引擎或者应用系统中,其他的数据表有可能会使用这些表中的数据,通用数据表有2个,他们都以act_ge
开头,ge
是general的缩写
-
资源表
(act_ge_bytearray)
该表用于保存与流程引擎相关的资源信息,只要调用了Activiti存储服务的API,涉及到的资源就会被转换为byte数组保存到这个表中。
在资源表中设计了一个BYTES字段用来保存资源内容,因此理论上其可以保存任何类型的资源(文件或者其他资源的输入流)。
一般情况下,这个表用来保存字符串、流程文件的内容、流程图片内容。
表中主要字段包括:
字段名 |
解释 |
REV_ |
数据版本,Activiti为一些有可能会被频繁修改的数据表加入该字段,用来表示数据库被操作的次数 |
NAME_ |
资源名称,类型为varchar(255) |
DEPLOYMENT_ID_ |
一次部署可以添加多个资源,该字段与部署表act_re_deployment 的主键相关联 |
BYTES_ |
资源内容,数据类型为longblob,最大可存储4GB数据 |
GENERATED_ |
是否由Activit自动生成的资源,0:false 1:true |
-
属性表
(act_ge_property)
Activiti将全部的属性抽象为key-value对,每个属性都有名称和值,使用
act_ge_property
保存这些属性。
表中主要字段包括:
字段名 |
解释 |
NAME_ |
属性名称,varchar(64) |
VALUE_ |
属性值,varchar(300) |
REV_ |
数据的版本号 |
流程存储表
流程引擎使用存储表来保存流程定义和部署信息这类数据,存储表名称以act_re
开头,re
是repository的缩写。
-
部署数据表
(act_re_deployment)
在Activiti中,一次部署可以添加多个资源,资源会被保存到上面的资源表act_ge_bytearray
,而对于部署,则部署信息会被保存到部署表act_re_deployment
。
表中主要字段包括:
字段名 |
解释 |
NAME_ |
部署的名称,可以调用Activiti的流程存储API来设置,类型为varchar(255) |
DEPLOYMENT_TIME_ |
部署时间,类型为timestamp |
以上字段除了NAME_可以不设置值外,其他字段在数据写入时必须设置值。
-
流程定义表
(act_re_procdef)
Activiti在部署添加资源时,如果发布部署的文件是流程文件(.bpmn或者.bpmn20.xml),则除了会解析这些流程文件将内容保存到资源表外,还会解析流程文件的内容,形成特定的流程定义数据写入到act_re_procdef
表中。
表中主要包含如下字段:
字段名 |
解释 |
CATEGORY_ |
流程定义的分类,读取流程xml文件中的targetNamespace值 |
NAME_ |
流程定义名称,读取流程文件中的process元素的name属性 |
KEY_ |
流程定义的key,读取流程文件中的process元素的id属性 |
DEPLOYMENT_ID_ |
流程定义对应的部署数据ID |
RESOURCE_NAME_ |
流程定义对应的资源名 |
DGRM_RESOURCE_NAME_ |
流程定义对应的流程图资源名称 |
SUSPENSION_STATE_ |
表示流程定义的状态是激活还是中止,激活状态时字段值为1,中止状态时字段为2,中止状态下流程不能被启动 |
身份数据表
Activit的整个身份数据模块可以独立于流程引擎而存在,有关身份数据的几张表,并没有保存于流程相关的数据及关联,身份表名称以act_id
开头,id
是identity的缩写
-
用户表
(act_id_user)
流程引擎的用户信息被保存在act_id_user
表中,表中主要字段如下:
字段名 |
解释 |
FIRST_ |
人名 |
LAST_ |
姓氏 |
EMAIL_ |
邮箱 |
PWD_ |
密码 |
PICTURE_ID_ |
用户图片,对应资源表中的数据ID |
-
用户账户(信息)表
(act_id_info)
Activiti将用户、用户账户和用户信息分为三种数据,其中用户表act_id_user
保存用户的数据,而用户账户和用户信息则被保存到act_id_info
中,表中主要字段如下:
字段名 |
解释 |
USER_ID_ |
对应用户表中的数据ID,没有强制做外键关联 |
TYPE_ |
信息类型,可设置用户账号(account)、用户信息(userinfo)和null三种值 |
KEY_ |
数据的键,可以根据该键来查询用户信息的值 |
VALUE_ |
数据的值,varchar(255) |
PASSWORD_ |
用户账户的密码字段,当前版本Activiti没有使用 |
PARENT_ID_ |
该信息的父信息ID,实现自关联 |
-
用户组表
(act_id_group)
Activiti使用act_id_group
表来保存用户组的数据,主要字段如下:
字段名 |
解释 |
NAME_ |
用户组名称 |
TYPE_ |
用户组类型 |
-
用户与组关系表
(act_id_membership)
一个用户组下可以有多个用户,一个用户也可以属于不同的用户组,为多对多的关系,Activit使用act_id_membership
维护此多对多关系,表中只有2个字段:
字段名 |
解释 |
USER_ID_ |
用户ID |
GROUP_ID_ |
用户组ID |
运行时数据表
运行时数据表用来保存流程在运行过程中产生的数据,例如流程实例、执行流、任务等,运行时数据表的名称以act_ru
开头,ru
是runtime的缩写
-
流程实例(执行流)表
(act_ru_execution)
流程启动后,会产生一个流程实例,同时会产生相应的执行流,流程实例和执行流均被保存到act_ru_execution
表中,如果一个流程实例只有一条执行流,那么该表中只有一条数据,这条数据既表示执行流,也表示流程实例,表中主要字段如下:
字段名 |
解释 |
PROC_INST_ID_ |
流程实例ID,一个流程实例可能产生多个执行流,该字段表示执行流所属的流程实例 |
BUSINESS_KEY_ |
启动流程是指定的业务主键 |
PARENT_ID_ |
父执行流的ID,一个流程实例可能会产生执行流,该字段保存父执行流ID |
PROC_DEF_ID_ |
流程定义数据的ID |
ACT_ID_ |
当前执行流行为的ID,ID在流程文件中定义 |
IS_ACTIVE_ |
该执行流是否活跃的标识 |
IS_CONCURRENT_ |
执行流是否正在并行 |
SUSPENSION_STATE_ |
标识流程的中断状态 |
-
流程任务表
(act_ru_task)
流程在运行过程中所产生的任务数据保存在act_ru_task
表中,该表中主要字段如下:
字段名 |
解释 |
EXECUTION_ID_ |
任务所在执行流ID |
PROC_INST_ID_ |
对应的流程实例ID |
PROC_DEF_ID_ |
对应的流程定义数据的ID |
NAME_ |
任务名称,在流程文件中定义 |
DESCRIPTION_ |
任务描述,在流程定义文件中配置 |
TASK_DEF_KEY_ |
任务定义的ID值,在流程文件中定义 |
OWNER_ |
任务拥有人,没有做外键关联 |
ASSIGNEE_ |
被指派执行该任务的人,没有做外键关联 |
PRIORITY_ |
任务优先级数值 |
DUE_DATE_ |
任务预定日志,数据类型datetime |
-
流程参数表
(act_ru_variable)
Activiti提供了act_ru_variable
来存放流程中的参数,这类参数包括流程实例参数、执行流参数和任务参数,参数有可能会有多种类型,因此该表使用多个字段来存放参数的值,主要字段如下:
字段名 |
解释 |
TYPE_ |
参数类型,该字段可以为boolean 、bytes 、serializalbe 、date 、dobule 、integer 、jpa-entity 、long 、null 、short 、string
|
NAME_ |
参数名称 |
EXECUTION_ID_ |
该参数对应的ID,可以为null |
PROC_INST_ID_ |
该参数对应的流程实例ID,可以为null |
TASK_ID_ |
如果该参数为任务参数,就需要设置任务ID |
BYTEARRAY_ID_ |
如果该参数值是序列化对象,那么可以将该对象作为资源保存到资源表中,该字段保存资源表中数据的ID |
DOUBLE_ |
参数类型为double的话,则值会保存到该字段中 |
LONG_ |
参数类型为long的话,则值会保存到该字段中 |
TEXT_ |
用于保存文本类型的参数值,参数类型:varchar(4000) |
TEXT2_ |
与TEXT_字段一样,用于保存文本类型的参数值 |
-
流程与身份关系表
(act_ru_identitylink)
Activiti中用户组和用户之间的关系,使用act_id_memership
表保存,用户或用户组与流程数据之间的关系则使用act_run_identitylink
表进行保存,主要字段如下:
字段名 |
解释 |
GROUP_ID_ |
用户组ID |
TYPE_ |
类型,3个可选值:assignee(指派人/组)、candidate(候选人/组)、owner(拥有人) |
USER_ID_ |
用户ID |
TASK_ID_ |
任务ID |
PROC_DEF_ID_ |
流程定义ID |
-
工作数据表
在流程的执行过程中,有一些工作需要定时或者重复执行,这类工作数据被保存到工作数据表中,Activiti提供了四个工作表用于保存不同的工作数据:
act_ru_job
:一般工作表
act_ru_deadletter_job
:无法执行工作表,用于存放无法执行的工作
act_ru_suspended_job
:中断工作表,中断工作产生后会将工作保存到该表中
act_ru_timer_job
:定时器工作表,用于存放定时器工作
-
事件描述表(act_ru_event_subscr)
如果流程到达某类事件节点,Activiti会往act_ru_event_subscr
表中加入事件描述数据,这些事件描述数据会决定流程事件的触发,act_ru_event_subscr
表中主要字段如下:
字段名 |
解释 |
EVENT_TYPE_ |
事件类型,不同的事件会产生不同类型的事件描述,但并不是说有的事件都会产生事件描述 |
EVENT_NAME_ |
事件名称,在流程文件中定义 |
EXECUTION_ID_ |
事件所在的执行流ID |
PROC_INST_ID_ |
事件所在的流程实例ID |
ACTIVITY_ID_ |
具体事件的ID,在流程文件中定义 |
CONFIGURATION_ |
事件的配置属性,该字段中有可能存放流程定义ID、执行流ID或者其他数据 |
历史数据表
历史数据表就好像流程引擎的日志表,操作过的流程元素将会被记录到历史数据表中,历史数据表名称以act_hi
开头,hi
是history的缩写。
-
流程实例表
(act_hi_procinst)
流程实例的历史数据会被保存到act_hi_procinst
中,只要流程被启动,就会将流程实例的数据写入到act_hi_procinst
中,除了基本的流程字段外,与运行时数据表不同的是,历史流程实例表还会记录流程的开始活动ID、结束活动ID等信息,该表主要字段如下:
字段名 |
解释 |
START_ACT_ID_ |
开始活动的ID,一般是流程开始事件的ID,在流程文件中定义 |
END_ACT_ID_ |
流程最后一个活动的ID,一般是流程结束事件的ID,在流程文件中定义 |
DELETE_REASON_ |
流程实例被删除的原因 |
此表其他字段与与形式流程实例表字段类似
-
流程明细表(act_hi_detail)
流程明细表会记录流程执行过程中的擦参数或者表单数据,由于在流程执行过程中会产生大量的这类数据,因此默认情况下,Activiti不会保存流程明细数据,除非将流程引擎的历史数据(history)设置为full
-
历史任务表和历史行为表
历史任务表(act_hi_taskinst
):当流程到达某个任务节点时,就会向历史任务表中写入历史任务数据,该表与运行时的任务表类似。
历史行为表(act_hi_actinst
):会记录每一个流程活动的实例,一个流程活动将会被记录为一条数据,根据该表可以追踪最完整的流程信息
-
附件表(act_hi_attachment)
和评论表(act_hi_comment)
使用任务服务(TaskService)的API,可以添加附件和评论,这些附件和评论将会被保存到act_hi_attachment
和act_hi_comment
表中。
附件表act_hi_attachment
主要字段如下:
字段名 |
解释 |
USER_ID_ |
附件对应的用户ID |
NAME_ |
附件名称 |
DESCRIPTION_ |
附件描述 |
TYPE_ |
附件类型 |
TASK_ID_ |
该附件对应的任务ID |
PROC_INST_ID_ |
对应的流程实例ID |
URL_ |
连接到该附件的url |
CONTENT_ID_ |
附件内容ID,附件的内容将会被保存到资源表中,该字段记录资源数据ID |
act_hi_comment
表实际不只保存评论数据,它还会保存某些事件数据,但它的表名为comment,因此更倾向把它叫做评论表,主要字段如下:
字段名 |
解释 |
TYPE_ |
评论的内容 |
TIME_ |
数据产生的时间(datetime) |
USER_ID_ |
产生评论数据的用户ID |
TASK_ID_ |
该评论数据的任务ID |
PROC_INST_ID_ |
该数据对应的流程实例ID |
ACTION_ |
该评论数据的操作标识 |
MESSAGE_ |
该评论数据的信息 |
FULL_MSG_ |
该字段同样记录评论数据的信息 |
虽然附件表和评论表的命名遵循历史数据表的命名规范(以act_hi
开头),但是可以调用其他组件的API往这两个表中写入数据。