前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Activiti7笔记(二)Activiti7一共涉及到25张表,哪些操作会涉及哪些表,每张表的作用是什么

Activiti7笔记(二)Activiti7一共涉及到25张表,哪些操作会涉及哪些表,每张表的作用是什么

作者头像
一写代码就开心
发布2022-05-09 10:11:28
2.1K0
发布2022-05-09 10:11:28
举报
文章被收录于专栏:java和python

目录

1 表结构介绍

以下是Activiti7生成的25张表

在这里插入图片描述
在这里插入图片描述

1.1 表的命名规则和作用

看到刚才创建的表,我们发现Activiti 的表都以 ACT_ 开头。

第二部分是表示表的用途的两个字母标识。 用途也和服务的 API 对应。 ACT_RE :'RE’表示 repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。 ACT_RU:'RU’表示 runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti 只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。 ACT_HI:'HI’表示 history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。 ACT_GE : GE 表示 general。 通用数据, 用于不同场景下

1.2Activiti数据表介绍

表分类

表名

解释

一般数据

[ACT_GE_BYTEARRAY]

通用的流程定义和流程资源

[ACT_GE_PROPERTY]

系统相关属性

流程历史记录

[ACT_HI_ACTINST]

历史的流程实例

[ACT_HI_ATTACHMENT]

历史的流程附件

[ACT_HI_COMMENT]

历史的说明性信息

[ACT_HI_DETAIL]

历史的流程运行中的细节信息

[ACT_HI_IDENTITYLINK]

历史的流程运行过程中用户关系

[ACT_HI_PROCINST]

历史的流程实例

[ACT_HI_TASKINST]

历史的任务实例

[ACT_HI_VARINST]

历史的流程运行中的变量信息

流程定义表

[ACT_RE_DEPLOYMENT]

部署单元信息

[ACT_RE_MODEL]

模型信息

[ACT_RE_PROCDEF]

已部署的流程定义

运行实例表

[ACT_RU_EVENT_SUBSCR]

运行时事件

[ACT_RU_EXECUTION]

运行时流程执行实例

[ACT_RU_IDENTITYLINK]

运行时用户关系信息,存储任务节点与参与者的相关信息

[ACT_RU_JOB]

运行时作业

[ACT_RU_TASK]

运行时任务

[ACT_RU_VARIABLE]

运行时变量表

2 什么场景下要操作哪些表?

2.1 流程部署涉及到的表

流程部署,就是将bpmn文件,就是我们画好的流程图,保存到数据库里面;一共有25张表,那么会保存到哪几个表里面呢?

首先我们写代码,就是流程部署的代码,只要执行这个代码,我们的bpmn文件就可以保存到数据库了

代码语言:javascript
复制
    /**
     * 部署流程定义
     */
    @Test
    public void testDeployment(){
//        1、创建ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        2、得到RepositoryService实例
        RepositoryService repositoryService = processEngine.getRepositoryService();
//        3、使用RepositoryService进行部署
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("bpmn/evection.bpmn") // 添加bpmn资源
                .addClasspathResource("bpmn/evection.png")  // 添加png资源
                .name("出差申请流程")
                .deploy();
//        4、输出部署信息
        System.out.println("流程部署id:" + deployment.getId());
        System.out.println("流程部署名称:" + deployment.getName());
//        流程部署id:1
//        流程部署名称:出差申请流程
    }
在这里插入图片描述
在这里插入图片描述

执行这个代码,会在控制台打印很多的东西,其中就有很多的sql语句,我们根据这些sql语句,就可以知道这段代码操作了哪些表;通过查看sql语句,分析得知,操作的表有:

2.1.1流程定义表 :[ACT_RE_DEPLOYMENT]

这个表就是部署单元信息表; 我们根据表名可以看到是属于RE表,RE表是资源信息相关的表; 执行完以上的代码,我们看数据库这个表里面存的是什么?

在这里插入图片描述
在这里插入图片描述

相当于只存了两个字段,一个是当前流程的名称,一个数执行代码时间,也就是部署时间;部署时间是自动生成的,当前流程名称是从哪来的? 原来我们在执行代码的时候,已经自己定义了

在这里插入图片描述
在这里插入图片描述

2.1.2流程部署表 :[ACT_RE_PROCDEF]

这个表里面存的是已部署的流程定义;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.3一般数据 :[ACT_GE_BYTEARRAY]

GE表,里面存的是通用数据 这个表里面存的是通用的流程定义和流程资源

在这里插入图片描述
在这里插入图片描述

就是将我们的bpmn文件,png文件保存到数据库,这个表就是资源文件

2.1.4一般数据 :[ACT_GE_PROPERTY]

这个表里面存放的是 系统相关属性数据,只要操作这个数据库,就会修改这个表

在这里插入图片描述
在这里插入图片描述

这个表不是部署的时候唯一操作的表

2.1.5 总结 : 操作数据表

流程定义部署后操作activiti的3张表如下:

act_re_deployment 流程定义部署表,每部署一次增加一条记录

act_re_procdef 流程定义表,部署每个新的流程定义都会在这张表中增加一条记录

act_ge_bytearray 流程资源表

注意:

act_re_deployment和act_re_procdef一对多关系,一次部署在流程部署表生成一条记录,但一次部署可以部署多个流程定义,每个流程定义在流程定义表生成一条记录。每一个流程定义在act_ge_bytearray会存在两个资源记录,bpmn和png。

建议一次部署一个流程,这样部署表和流程定义表是一对一有关系,方便读取流程部署及流程定义信息。

2.2 启动流程实例涉及到的表

启动流程实例,就相当于张三创建出差申请

相关的代码

代码语言:javascript
复制
/**
     * 启动流程实例,相当于申请提交申请单
     */
    @Test
    public void testStartProcess(){
//        1、创建ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        2、获取RunTimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
//        3、根据流程定义Id启动流程
        ProcessInstance processInstance = runtimeService
                .startProcessInstanceByKey("myJtxx");
//        输出内容
        System.out.println("流程定义id:" + processInstance.getProcessDefinitionId());
        System.out.println("流程实例id:" + processInstance.getId());
        System.out.println("当前活动Id:" + processInstance.getActivityId());
//
//        流程定义id:myJtxx:1:4
//        流程实例id:2501
//        当前活动Id:null
    }

以上代码执行完,输出的结果是

代码语言:javascript
复制
//        流程定义id:myJtxx:1:4
//        流程实例id:2501
//        当前活动Id:null

那么以上代码操作的数据库的表有哪几个?

2.2.1 一般数据 [ACT_GE_PROPERTY]

这个是系统相关属性相关的 表,只要操作数据库,这个表里面的数据就会变化,就是对这个表进行更新操作

在这里插入图片描述
在这里插入图片描述

2.2.2 流程历史记录 [ACT_HI_ACTINST]

这个表里面存的是历史的流程实例;

在这里插入图片描述
在这里插入图片描述

张三刚创建一个申请单,这个表里面就只有两个数据;

在这里插入图片描述
在这里插入图片描述

创建出差申请的时候,开始标志出差申请已经完成,所以这个里面第一个数据有开始时间,有结束时间;

只是创建出差申请,所以第二个数据是没有结束时间的

在这里插入图片描述
在这里插入图片描述

以上这3个的字段值,是我们在bpmn里面定义的

在这里插入图片描述
在这里插入图片描述

2.2.3 流程历史记录[ACT_HI_IDENTITYLINK]

历史的流程运行过程中用户关系 就是在走流程的时候,涉及到的人,都会保存在这个表里面;

在这里插入图片描述
在这里插入图片描述

2.2.4 流程历史记录[ACT_HI_PROCINST]

历史的流程实例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.5 流程历史记录[ACT_HI_TASKINST]

历史的任务实例

在这里插入图片描述
在这里插入图片描述

一个节点可以认为是一个任务,每一个节点的创建都会在这个里面进行保存一条数据

2.2.6 运行实例表[ACT_RU_EXECUTION]

运行时流程执行实例;

这个表里面主要记录的是当前已经执行到哪个节点了,把对应的节点对象记录到这个里面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.7 运行实例表[ACT_RU_IDENTITYLINK]

运行时用户关系信息,存储任务节点与参与者的相关信息 也就是只要当前任务有参与者,就会将参与者的信息保存到这个表,多个人参与,保存多个信息

在这里插入图片描述
在这里插入图片描述

2.2.8 运行实例表[ACT_RU_TASK]

运行时任务

在这里插入图片描述
在这里插入图片描述

一个流程有多个节点,到某一个节点的时候,都会更新这个表,将当前节点的数据更新到这个表

2.2.9 总结: 操作数据表

act_hi_actinst 流程实例执行历史

act_hi_identitylink 流程的参与用户历史信息

act_hi_procinst 流程实例历史信息

act_hi_taskinst 流程任务历史信息

act_ru_execution 流程执行信息

act_ru_identitylink 流程的参与用户信息

act_ru_task 任务信息

2.3 个人任务查询–所涉及到的表

也就是,某一个人登录系统,可以查看属于自己的节点,就是是否流程走到自己这里了;如果走到这里,就查询出来;

流程启动后,任务的负责人就可以查询自己当前需要处理的任务,查询出来的任务都是该用户的待办任务。

那么当一个人获取数据,是要查询数据库里面的哪个表呢?

我们执行完查询的代码,看到控制台打印了查询日志

代码语言:javascript
复制
select distinct RES.*
 FROM ACT_RU_TASK RES
 INNER JOIN ACT_RE_PROCDEF D
 ON RES.PROC_DEF_ID_ = D.ID_
 WHERE RES.ASSIGNEE_ = 'zs' and D.KEY_ = 'myJtxx' order by RES.ID_ asc
 LIMIT 2147483647 OFFSET 0;

我们分析这个sql语句, 查询了两个表,ACT_RU_TASK 和ACT_RE_PROCDEF表;

ACT_RU_TASK 运行时任务表,就是对于一个流程,已经走到哪个节点了,这个里面保存的就是当前正在走的节点的信息; ACT_RE_PROCDEF 已部署的流程定义表 ,就是部署流程的时候,创建的流程信息;

两个表联查,就可以查询到某一个用户,在某一个流程中,自己所需要处理的任务的list集合;

在这里插入图片描述
在这里插入图片描述

2.4 完成个人任务–所涉及到的表

代码语言:javascript
复制
 // 完成任务,
    @Test
    public void completTask(){
//        获取引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        获取taskService
        TaskService taskService = processEngine.getTaskService();

//        根据流程key 和 任务的负责人 查询任务
//        返回一个任务对象
        Task task = taskService.createTaskQuery()
                .processDefinitionKey("myJtxx") //流程Key
                .taskAssignee("jing")  //要查询的负责人
                .singleResult();

//        完成任务,参数:任务id
        taskService.complete(task.getId());
    }

张三要提交申请单,就是要完成自己的任务,让其他人进行审核,张三完成任务的代码就是以上的代码;

ACT_RU_TASK 运行时任务表,就是对于一个流程,已经走到哪个节点了,这个里面保存的就是当前正在走的节点的信息;也就是保存的是当前正在执行的任务;

在这里插入图片描述
在这里插入图片描述

act_hi_taskinst 流程任务历史信息 已经执行完成的任务,都会保存在这个里面

在这里插入图片描述
在这里插入图片描述

**[ACT_HI_ACTINST]**历史的流程实例

在这里插入图片描述
在这里插入图片描述

**[ACT_HI_IDENTITYLINK]**历史的流程运行过程中用户关系

在这里插入图片描述
在这里插入图片描述

**[ACT_RU_EXECUTION]**运行时流程执行实例

**[ACT_RU_IDENTITYLINK]**运行时用户关系信息,存储任务节点与参与者的相关信息 这个是更新操作

2.4 完成整个流程任务,哪些表还有数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一个流程实例走完了之后,关于运行的表,里面的数据都没有了

以下这些表都没有了

在这里插入图片描述
在这里插入图片描述

2.5 查询流程定义–所涉及到的表

act_re_deployment 我们进行部署流程的 时候,会在ACT_RE_PROCDEF这个表里面存流程数据,所以现在只是查询这个表就可以将对应的流程查询出来

代码语言:javascript
复制
 /**
     * 查询流程定义
     */
    @Test
    public void queryProcessDefinition(){
        //        获取引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        repositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
//        得到ProcessDefinitionQuery 对象
        ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
//          查询出当前所有的流程定义
//          条件:processDefinitionKey =evection
//          orderByProcessDefinitionVersion 按照版本排序
//        desc倒叙
//        list 返回集合
        List<ProcessDefinition> definitionList = processDefinitionQuery.processDefinitionKey("myJtxx")
                .orderByProcessDefinitionVersion()
                .desc()
                .list();
//      输出流程定义信息
        for (ProcessDefinition processDefinition : definitionList) {
            System.out.println("流程定义 id="+processDefinition.getId());
            System.out.println("流程定义 name="+processDefinition.getName());
            System.out.println("流程定义 key="+processDefinition.getKey());
            System.out.println("流程定义 Version="+processDefinition.getVersion());
            System.out.println("流程部署ID ="+processDefinition.getDeploymentId());
        }

    }

2.6 流程删除–所涉及到的表

删除的代码是

代码语言:javascript
复制
public void deleteDeployment() {
		// 流程部署id
		String deploymentId = "1";
		
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 通过流程引擎获取repositoryService
		RepositoryService repositoryService = processEngine
				.getRepositoryService();
		//删除流程定义,如果该流程定义已有流程实例启动则删除时出错
		repositoryService.deleteDeployment(deploymentId);
		//设置true 级联删除流程定义,即使该流程有流程实例启动也可以删除,设置为false非级别删除方式,如果流程
		//repositoryService.deleteDeployment(deploymentId, true);
	}

执行完以上的代码,删除了哪些表?

和创建流程的表是一样的,就是这3个表; [ACT_RE_DEPLOYMENT] [ACT_RE_PROCDEF] [ACT_GE_BYTEARRAY]

历史记录里面的表是不会删除的

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 1 表结构介绍
    • 1.1 表的命名规则和作用
      • 1.2Activiti数据表介绍
      • 2 什么场景下要操作哪些表?
        • 2.1 流程部署涉及到的表
          • 2.1.1流程定义表 :[ACT_RE_DEPLOYMENT]
          • 2.1.2流程部署表 :[ACT_RE_PROCDEF]
          • 2.1.3一般数据 :[ACT_GE_BYTEARRAY]
          • 2.1.4一般数据 :[ACT_GE_PROPERTY]
          • 2.1.5 总结 : 操作数据表
        • 2.2 启动流程实例涉及到的表
          • 2.2.1 一般数据 [ACT_GE_PROPERTY]
          • 2.2.2 流程历史记录 [ACT_HI_ACTINST]
          • 2.2.3 流程历史记录[ACT_HI_IDENTITYLINK]
          • 2.2.4 流程历史记录[ACT_HI_PROCINST]
          • 2.2.5 流程历史记录[ACT_HI_TASKINST]
          • 2.2.6 运行实例表[ACT_RU_EXECUTION]
          • 2.2.7 运行实例表[ACT_RU_IDENTITYLINK]
          • 2.2.8 运行实例表[ACT_RU_TASK]
          • 2.2.9 总结: 操作数据表
        • 2.3 个人任务查询–所涉及到的表
          • 2.4 完成个人任务–所涉及到的表
            • 2.4 完成整个流程任务,哪些表还有数据
              • 2.5 查询流程定义–所涉及到的表
                • 2.6 流程删除–所涉及到的表
                相关产品与服务
                数据库
                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档