Flowable进阶学习(二)流程部署的深入解析

news2024/9/20 1:32:24

文章目录

  • 一、流程部署涉及表及其结构
    • 1. 部署流程代码示例:
    • 2. 流程部署所涉及表:
    • 3. 流程部署涉及表的结构、字段解析
  • 二、流程部署中数据的存储的过程

一、流程部署涉及表及其结构

1. 部署流程代码示例:

  1. 设计俩个流程,并压缩成zip包。
    在这里插入图片描述
  2. 代码:
    package com.hx;
    
    import org.flowable.engine.*;
    import org.flowable.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration;
    import org.flowable.engine.repository.Deployment;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.InputStream;
    import java.util.zip.ZipInputStream;
    
    /**
     * @author Huathy
     * @date 2023-01-08 21:57
     * @description
     */
    public class Test4_ProcessDeploy {
        ProcessEngineConfiguration configuration = null;
        ProcessEngine processEngine = null;
        @Before
        public void before() {
            // 通过 ProcessEngineConfiguration 构建我们需要的 ProcessEngine
            configuration = new StandaloneInMemProcessEngineConfiguration();
            // 配置相关数据库连接
            configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");
            configuration.setJdbcUsername("root");
            configuration.setJdbcPassword("admin");
            configuration.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/flowable_learn?useSSL=false&serverTimezone=UTC");
            // 如果数据库中的表结构不存在则新建
            configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
            processEngine = configuration.buildProcessEngine();
        }
    
        /**
         * 流程部署:涉及到三张表
         *  流程部署表:ACT_RE_DEPLOYMENT一次流程部署操作就会产生一条记录
         *  流程定义表:ACT_RE_PROCDEF        一次流程部署操作中包含几个流程定义文件就会产生几条记录
         *  流程定义资源表:ACT_GE_BYTEARRAY   有多少资源就会产生几条记录
         */
        @Test
        public void test1_deploy(){
            RepositoryService repositoryService = processEngine.getRepositoryService();
            InputStream ins = this.getClass().getClassLoader().getResourceAsStream("holidayAndProcess.zip");
            ZipInputStream zipIns = new ZipInputStream(ins);
            // 流程部署操作,关联zip或者bar文件
            Deployment deploy = repositoryService.createDeployment()
    //                .addClasspathResource("MyProcess.bpmn20.xml")
                    .addZipInputStream(zipIns)
                    .name("请假流程")
                    .category("请假")     // 分类
                    .tenantId("whx")     // 租户ID
                    .deploy();
            System.out.println("deploy.getId() = " + deploy.getId());
            System.out.println("deploy.getName() = " + deploy.getName());
            System.out.println("deploy.getCategory() = " + deploy.getCategory());
        }
    }
    
  3. 测试运行结果
    在这里插入图片描述

2. 流程部署所涉及表:

查看表结构与数据变动(其中ACT_RE_DEPLOYMENT的一条记录可以对应ACT_RE_PROCDEF的多条记录)

  • 流程部署表:ACT_RE_DEPLOYMENT(一次流程部署操作就会产生一条记录)
    在这里插入图片描述
  • 流程定义表:ACT_RE_PROCDEF(一次流程部署操作中包含几个流程定义文件就会产生几条记录)
    ID_            |REV_|CATEGORY_                         |NAME_      |KEY_       |VERSION_|DEPLOYMENT_ID_|RESOURCE_NAME_        |DGRM_RESOURCE_NAME_        |DESCRIPTION_   |HAS_START_FORM_KEY_|HAS_GRAPHICAL_NOTATION_|SUSPENSION_STATE_|TENANT_ID_|ENGINE_VERSION_|DERIVED_FROM_|DERIVED_FROM_ROOT_|DERIVED_VERSION_|
    ---------------+----+----------------------------------+-----------+-----------+--------+--------------+----------------------+---------------------------+---------------+-------------------+-----------------------+-----------------+----------+---------------+-------------+------------------+----------------+
    MyHolidayUI:1:7|   1|http://www.flowable.org/processdef|MyHolidayUI|MyHolidayUI|       1|1             |MyHolidayUI.bpmn20.xml|MyHolidayUI.MyHolidayUI.png|MyHolidayUI请假流程|                  0|                      1|                1|whx       |               |             |                  |               0|
    MyProcess:1:6  |   1|http://www.flowable.org/processdef|MyProcess  |MyProcess  |       1|1             |MyProcess.bpmn20.xml  |MyProcess.MyProcess.png    |请假流程           |                  0|                      1|                1|whx       |               |             |                  |               0|
    
  • 流程定义资源表:ACT_GE_BYTEARRAY(有多少资源就会产生几条记录)
    在这里插入图片描述

3. 流程部署涉及表的结构、字段解析

  1. 流程部署表:ACT_RE_DEPLOYMENT
字段含义与注释
ID_主键
NAME_名称
CATEGORY_分类
KEY_
TENANT_ID_租户ID
DEPLOY_TIME_部署事件
DERIVED_FROM_来源于
DERIVED_FROM_ROOT_来源于
ENGINE_VERSION_引擎版本号

在这里插入图片描述
2. 流程定义表:ACT_RE_PROCDEF

NameValue
ID_自动生成的ID
REV_1
CATEGORY_流程定义的namespace
NAME_每个流程的名称
KEY_自己定义的ID
VERSION_1
DEPLOYMENT_ID_部署关联的ID
RESOURCE_NAME_资源名称
DGRM_RESOURCE_NAME_图片
DESCRIPTION_MyHolidayUI请假流程
HAS_START_FORM_KEY_0
HAS_GRAPHICAL_NOTATION_1
SUSPENSION_STATE_当前流程的状态,1正常,2挂起
TENANT_ID_租户ID。可关联用户。
ENGINE_VERSION_
DERIVED_FROM_
DERIVED_FROM_ROOT_
DERIVED_VERSION_0
  1. 部署资源表:ACT_GE_BYTEARRAY
字段含义及备注
ID_主键
REV_版本号
NAME_部署的文件名称(如MyProcess.bpmn20.xml)
DEPLOYMENT_ID_部署ID
BYTES_字节(二进制数据)
GENERATED_是否系统生成。
(0为用户上传,1为系统生成。比如系统会自动根据xml生成png文件)

二、流程部署中数据的存储的过程

// 我们一路跟踪代码的方法
// org.flowable.engine.repository.DeploymentBuilder#deploy
// org.flowable.engine.common.impl.interceptor.CommandExecutor#execute(org.flowable.engine.common.impl.interceptor.Command<T>)
// 进入 org.flowable.engine.impl.cmd.DeployCmd 类
// 看到执行器方法 org.flowable.engine.impl.cmd.DeployCmd#execute
// org.flowable.engine.impl.cmd.DeployCmd#executeDeploy
protected Deployment executeDeploy(CommandContext commandContext) {
// 获取 DeploymentEntity 对象,ProcessEngineConfigurationImpl 配置文件实现类,setDeploymentTime设置部署时间
   if (this.deploymentBuilder.isDuplicateFilterEnabled()) {
			// 是否有开启重复的流程的判断,若有则进行判断
   }
   deployment.setNew(true);
// Save the data 保存数据
  CommandContextUtil.getDeploymentEntityManager(commandContext).insert(deployment);
// Actually deploy 部署流程
  processEngineConfiguration.getDeploymentManager().deploy(deployment, deploymentSettings);
// 省略
   return deployment;
}

// 继续跟踪上面的insert方法 
// org.flowable.engine.impl.persistence.entity.DeploymentEntityManagerImpl#insert
@Override
public void insert(DeploymentEntity deployment) {
    // 插入部署信息
    insert(deployment, false);
		// 循环插入资源文件
    for (EngineResource resource : deployment.getResources().values()) {
        resource.setDeploymentId(deployment.getId());
        getResourceEntityManager().insert((ResourceEntity) resource);
    }
}

// 继续跟踪上面的deploy方法 
// org.flowable.engine.impl.persistence.deploy.DeploymentManager#deploy(org.flowable.engine.impl.persistence.entity.DeploymentEntity, java.util.Map<java.lang.String,java.lang.Object>)
public void deploy(DeploymentEntity deployment, Map<String, Object> deploymentSettings) {
   for (EngineDeployer deployer : deployers) {
       deployer.deploy(deployment, deploymentSettings);
   }
}
// 跟踪deployer.deploy
// org.flowable.engine.impl.bpmn.deployer.BpmnDeployer#deploy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/172751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目引入多类数据源依赖,MyBatisPlus 是如何确定使用哪种数据源的?

背景 壬寅年腊月廿八&#xff0c;坚守在工作岗位。看了一下项目的 pom.xml 依赖&#xff0c;发现了好几个数据库连接相关的包&#xff0c;有 commons-dbcp2、c3p0、hikaricp、druid-spring-boot-starter&#xff0c;这可是四种不同的数据库连接池呢&#xff0c;一个项目中引入…

Github访问办法

GitHub GitHub是为开发者提供Git仓库的托管服务。这是一个让开发者与朋友、同事、同学及陌生人共享代码的完美场所。 GitHub除提供Git仓库的托管服务外&#xff0c;还为开发者或团队提供了一系列功能&#xff0c;帮助其高效率、高品质地进行代码编写。 GitHub的创始人之一Chr…

使用GPIO模拟I2C的驱动程序分析

使用GPIO模拟I2C的驱动程序分析 文章目录使用GPIO模拟I2C的驱动程序分析参考资料&#xff1a;一、回顾I2C协议1.1 硬件连接1.3 协议细节二、 使用GPIO模拟I2C的要点三、 驱动程序分析3.1 平台总线设备驱动模型3.2 设备树3.3 驱动程序分析1. I2C-GPIO驱动层次2. 传输函数分析四、…

SQL注入简介与原理

数据来源 本文仅用于信息安全学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若观众因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与本人无关。 SQL注入 首先从SQL注入存在的代码来看 假如这里的id没有过滤&#xff0c;我们就可以输入…

JDK7-hashmap源码

解决冲突的方法 提高效率 特殊情况扰动算法 当冲突大于一定量时需要扩容 在JDK1.7中&#xff0c;HashMap是由数组单向链表实现的&#xff0c;原理图如下&#xff1a; HashMap基本用法 public static void main(String[] args) {//key-value, 数组存储头指针的引用地址&#xf…

SpringCloud项目日志接入ELK实战

写作背景 前面我对SpringCloud Netflix相关的组件&#xff0c;Eureka、Ribbon、OpenFeign、Hystrix和Zuul都进行了复习&#xff0c;后面随着代码越写越多就想着&#xff0c;要不就慢慢完善这个项目代码&#xff0c;把工作里用到的东西慢慢在这个Demo级别的项目里用起来&#x…

idea高效实用优化技巧

文章目录IDEA介绍配置优化注释模板快捷键硬件升级IDEA介绍 IDEA&#xff0c;全称IntelliJ IDEA&#xff0c;是Java语言的集成开发环境&#xff0c;IntelliJ在业界被公认为最好的java开发工具之一&#xff0c;尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、C…

gdb使用简介

目录 编译时&#xff0c;加入-g选项 不加-g选项&#xff0c;将不能加断点 加入-g选项&#xff0c;才能加断点 run与start start run break continue 编译时&#xff0c;加入-g选项 不加-g选项&#xff0c;将不能加断点 加入-g选项&#xff0c;才能加断点 run与start …

经典的 海量数据面试题 —— 送你一套僻邪剑谱~

目录 前言 一、哈希切割 题目一 解法一&#xff1a;哈希切割 二、位图的应用 题目一&#xff1a; 解法一&#xff1a;哈希切割 解法二&#xff1a;双位图 解法三&#xff1a;单位图&#xff08;进阶版&#xff09; 题目二 解法一&#xff1a;哈希切割 解法二&#xff…

ChatGPT踩坑(too many signups from the same IP)

ChatGPT踩坑 首先是去OpenAI的官网注册&#xff0c;点击API 进去注册一个账号 然后就会发现注册不成功&#xff0c;继续尝试就会出现下面的情况 后来我发现比较靠谱的方法是&#xff0c;通过google账号注册&#xff08;或许微软账号也行&#xff09;&#xff0c;后面会有一步让…

python经典刷题-关于文件、日期的题

目录标题1&#xff0c;统计目录下所有文件大小-os的使用2&#xff0c;按文件后缀整理文件夹3&#xff0c;递归搜索目录找出最大文件4&#xff0c;计算不同课程的最高分最低分--分组处理5&#xff0c;实现不同文件的关联6&#xff0c;批量txt文件的合并7&#xff0c;统计每个兴趣…

植物神经紊乱在心脑血管方面可能出现哪些症状

大家好&#xff0c;当植物神经的失衡涉及心脑血管的时候&#xff0c;可能会出现哪些症状表现&#xff1f; 植物神经紊乱为什么会涉及心脑血管&#xff1f; 你们知道吗&#xff1f;植物神经紊乱的实质&#xff0c;是由于体内庞大的神经系统的失衡导致的。而植物神经&#xff0c;…

javaEE 初阶 — 网络通信基础

文章目录1. IP 地址2. 端口号3. 认识协议4. 协议分层4.1 分层的作用4.2 OSI七层模型4.3 TCP/IP五层&#xff08;或四层&#xff09;模型4.4 网络数据传输的基本流程4.4.1 发送方4.4.2 接收方1. IP 地址 IP地址主要用于标识网络主机、其他网络设备&#xff08;如路由器&#xff…

PowerSNMP for .NET 6.1.0.0 Crack

关于适用于 .NET 的 PowerSNMP 创建自定义 SNMP 管理器、陷阱和代理应用程序以监视和控制网络设备。 PowerSNMP for .NET 包括简单网络管理协议 (SNMP) 组件&#xff0c;可无缝集成线程通信、安全和编码/解码&#xff0c;因此您可以快速开发自定义 SNMP 应用程序。该开发工具需…

HW_DIMM分类与比较

DIMM 分类参考链接 UDIMM UDIMM is also known as unbuffered DIMM, that is, unbuffered dual in-line memory module. The application of this memory module means that the address and control signals can directly reach the DRAM chip on the server DIMM without g…

[hive]维度模型分类:星型模型,雪花模型,星座模型|范式

一、维度模型分类:星型模型,雪花模型,星座模型1、星型模型星型模型中只有一张事实表&#xff0c;以及0张或多张维度表&#xff0c;事实与纬度表通过主键外键相关联&#xff0c;维度之间不存在关联关系&#xff0c;当所有纬度都关联到事实表时&#xff0c;整个图形非常像一种星型…

ESP32设备驱动-MPU-9250 3轴陀螺仪/加速度计/磁力计驱动

MPU-9250 3轴陀螺仪/加速度计/磁力计驱动 1、MPU9250介绍 MPU-9250 是面向智能手机、平板电脑、可穿戴传感器和其他消费市场的第二代 9 轴运动处理单元™(Motion Processing Unit™)。 MPU-9250 采用 3x3x1mm QFN 封装,是世界上最小的 9 轴运动跟踪设备,采用了最新的 Inven…

钢结构之槽钢及角钢

槽钢 槽钢是截面为凹槽形的长条钢材&#xff0c;截面形状为槽形的型钢。 槽钢的基本介绍 槽钢属建造用和机械用碳素结构钢&#xff0c;是复杂断面的型钢钢材&#xff0c;其断面形状为凹槽形。槽钢主要用于建筑结构、幕墙工程、机械设备和车辆制造等。在使用中要求其具有较好的…

没有选品经验的电商卖家该在TikTok上卖什么商品?超店有数来帮你

TikTok近年来增速迅猛&#xff0c;凭借巨大的流量频频登榜多国APP下载榜首&#xff0c;而其电商业务同样处于快速增长状态。2022上半年&#xff0c;TikTok电商的GMV已超10亿美元&#xff1b;2022年全年&#xff0c;TikTok Shop在东南亚GMV增长逾三倍&#xff0c;达到44亿美元。…

【SpringBoot2】SpringBoot中配置文件详解

SpringBoot使用一个全局的配置文件&#xff0c;配置文件名是固定的&#xff0c;支持两种格式 1、两种格式&#xff08;properties&#xff0c;yml&#xff09; application.properties application.yml 由此可以看出 application.yml 文件格式的内容更为简洁&#xff0c;清晰…