暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

flowable数据表数据流转总结

ITSK 2021-04-25
4837




今天总结一下flowable流程引擎在流转过程中数据表数据的变化情况~~

flowable支持的数据库
以下表格摘自flowable官网:
Flowable database typeExample JDBC URLNotes

h2

jdbc:h2:tcp://localhost/flowable

Default configured database

mysql

jdbc:mysql://localhost:3306/flowable?autoReconnect=true

Tested using mysql-connector-java database driver

oracle

jdbc:oracle:thin:@localhost:1521:xe


postgres

jdbc:postgresql://localhost:5432/flowable


db2

jdbc:db2://localhost:50000/flowable


mssql

jdbc:sqlserver://localhost:1433;databaseName=flowable (jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver) OR jdbc:jtds:sqlserver://localhost:1433/flowable (jdbc.driver=net.sourceforge.jtds.jdbc.Driver)

Tested using Microsoft JDBC Driver 4.0 (sqljdbc4.jar) and JTDS Driver


flowable数据表的命名规则
ACT_RE_* : RE表示repository(存储)。RepositoryService接口操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。
ACT_RU_* : RU表示runtime。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。flowable只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。
ACT_ID_*: ID表示identity(组织机构)。这些表包含标识的信息,如用户,用户组,等等。
ACT_HI_*: HI表示history。就是这些表包含着历史的相关数据,如结束的流程实例,变量,任务,等等。

ACT_GE_*:  普通数据,各种情况都使用的数据。


flowable常用数据表简介:
通用数据(2张):
ACT_GE_BYTEARRAY  通用的流程定义和流程资源
ACT_GE_PROPERTY   系统相关属性
流程历史记录(8张)
ACT_HI_ACTINST    历史的流程实例
ACT_HI_ATTACHMENT 历史的流程附件
ACT_HI_COMMENT    历史的评论信息
ACT_HI_DETAIL 历史的流程运行中的细节信息
ACT_HI_IDENTITYLINK  历史的流程运行过程中用户关系
ACT_HI_PROCINST   历史的流程实例
ACT_HI_TASKINST   历史的任务实例
ACT_HI_VARINST    历史的流程运行中的变量信息
用户用户组表(9张)
ACT_ID_BYTEARRAY  二进制数据表
ACT_ID_GROUP  用户组信息表
ACT_ID_INFO   用户信息详情表
ACT_ID_MEMBERSHIP 人与组关系表
ACT_ID_PRIV   权限表
ACT_ID_PRIV_MAPPING  用户或组权限关系表
ACT_ID_PROPERTY   属性表
ACT_ID_TOKEN  系统登录日志表
ACT_ID_USER   用户表
流程定义表(3张)
ACT_RE_DEPLOYMENT 部署信息
ACT_RE_MODEL  模型信息
ACT_RE_PROCDEF    已部署的流程定义
运行实例表(10张)
ACT_RU_DEADLETTER_JOB    正在运行的任务表
ACT_RU_EVENT_SUBSCR  运行时事件
ACT_RU_EXECUTION  运行时流程执行实例
ACT_RU_HISTORY_JOB   历史作业表
ACT_RU_IDENTITYLINK  运行时用户关系信息
ACT_RU_JOB 运行时作业表
ACT_RU_SUSPENDED_JOB 暂停作业表
ACT_RU_TASK   运行时任务表
ACT_RU_TIMER_JOB  定时作业表
ACT_RU_VARIABLE   运行时变量表
其他表(2张)
ACT_EVT_LOG   事件日志表
ACT_PROCDEF_INFO  流程定义信息


flowable流程引擎数据流转
  • 保存流程模板
保存流程模板实质就是保存bpmn文件,流程模板实质就是定义了一个流程流转的路径规则。如下调用模板保存方法会将数据保存到act_de_model表:
Model saveOrUpdateModel = modelService.createModel(newModel, userDo);
act_de_model保存数据:


  • 流程部署:


流程模板保存后还不能使用,必须部署后生成流程定义才能被流程引擎使用:

①一个流程模板每部署一次生成一条部署记录(act_de_model 和 act_re_deployment:一对多 )
②一次部署文件(zip)可能有一个或多个流程定义(act_re_deployment和 act_re_prodef是一对多)
③一次部署产生2条资源记录,一条xml,一条图片的(act_re_deployment和act_ge_bytearray是一对二关系)

流程模板每次部署会保存在如下三张表:

Deployment deploy = repositoryService.createDeployment()
.name(existModel.getName())
.key(existModel.getKey()).addBpmnModel(existModel.getKey()+".bpmn20.xml", bpmnModel).deploy();
流程部署信息表:act_re_deployment

流程定义表:act_re_procdef
资源表:act_ge_bytearray

使用同一个模型进行第二次流程部署:可以看到使用同一个模型发布的流程,流程定义中会有版本的概念,已启动的流程还是基于原版本的流程定义继续执行,新启动的流程就会基于最新版本的流程定义进行流转。

  • 启动流程:


如下代码是搜索此次部署对应的流程定义信息,也就是act_re_procdef表的信息查询。然后启动这个流程。

ProcessDefinition pd=repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
ProcessInstance pi=runtimeService.startProcessInstanceById(pd.getId());

首先向act_ru_execution表中插入一条记录,记录的是这个流程定义的执行实例,其中id和proc_inst_id相同都是流程执行实例id,包含流程定义的id外键

然后向act_ru_task插入一条记录,记录的是第一个任务的信息,也就是开始执行第一个任务。包括act_ru_execution表中的execution_id外键和proc_inst_id外键,也就是本次执行实例id。

然后向act_hi_procinst表和act_hi_taskinst表中各插入一条记录,记录的是本次执行实例和任务的历史记录:

启动流程:


【act_ru_execution、act_ru_task、act_hi_procinst、act_hi_taskinst】
①一个流程定义启动以后生成一个对应的流程定义执行实例插入act_ru_execution表(act_re_prodef和act_ru_execution是一对一关系,还关联了正在执行的任务key:ACT_ID_)
②然后执行第一个任务插入到act_ru_task表(act_ru_execution和act_ru_task是一对多的关系:execution_id、proc_inst_id外键)
③然后向act_hi_procinst表和act_hi_taskinst表中各插入一条记录,记录的是本次执行实例和任务的历史记录;
  • 完成任务:


Task task = taskService.createTaskQuery().processInstanceId("b8840dfc-a4b5-11eb-90cc-005056c00001").taskDefinitionKey("testUser").singleResult();
taskService.setVariable(task.getId(), "var1", "var1");
taskService.complete(task.getId());

执行当前任务后,act_ru_task表中当前任务的记录被删除,如果后续还有任务节点,新增后续待执行的任务信息。

同时删除act_ru_execution表中的记录,同理如还存在后续任务,则只会删除当前任务执行实例,然后新增后续任务的执行实例信息。

act_hi_taskinst、act_hi_varinst中的记录保持

执行任务:

【act_ru_variable、act_ru_task、act_ru_execution、act_hi_var_inst、act_hi_taskinst】
①首先向act_ru_variable表中插入变量信息,如果是全局变量即整个流程都会有效的变量,那么关联本次流程执行实例的两个id外键,但不包括任务的id;
②act_ru_task表删除已完成的任务,然后再插入当前即将执行或正在执行的任务;
③act_ru_execution表中关联的更新act_id_为当前act_ru_task表中任务的key即当前正在执行任务的key;
④同时向act_hi_var_inst、act_hi_taskinst插入历史即可。

长按二维码关注我们

ITSK

博客|yajing8


我知道你在看

文章转载自ITSK,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论