Flowable:关于流程部署、启动、处理、完成各模块的浅析(图解)(一)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Flowable:关于流程部署、启动、处理、完成各模块的浅析(图解)

项目准备

新建一个数据库名为:flowable-leaarn(新建的没截图,这是已经初始化后的)

新建springboot项目就不说了,都学得Flowable了,应该会的吧,下面直接是配置准备:

新建Test类,增加before方法,运行先获取processEngine引擎配置,并且进行初始化数据库

ProcessEngineConfiguration configuration = null;
@Before
public void before(){
    // 获取  ProcessEngineConfiguration 对象
    configuration = new StandaloneProcessEngineConfiguration();
    // 配置 相关的数据库的连接信息
    configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");
    configuration.setJdbcUsername("root");
    configuration.setJdbcPassword("root");
    configuration.setJdbcUrl("jdbc:mysql://localhost:3306/flowable1?serverTimezone=UTC&nullCatalogMeansCurrent=true");
    // 如果数据库中的表结构不存在就新建
    configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
}

运行初始化:

如果你有了数据库,可以设置更新表结构的配置

// 如果数据库中的表结构不存在就新建
configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);

准备请假流程的流程图bpnm.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
             xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
             xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
             xmlns:flowable="http://flowable.org/bpmn"
             typeLanguage="http://www.w3.org/2001/XMLSchema"
             expressionLanguage="http://www.w3.org/1999/XPath"
             targetNamespace="http://www.flowable.org/processdef">
    <process id="holidayRequest" name="请假流程" isExecutable="true">
        <startEvent id="startEvent"/>
        <sequenceFlow sourceRef="startEvent" targetRef="approveTask"/>
        <userTask id="approveTask" name="同意或者拒绝请假" flowable:assignee="zhangsan"/>
        <sequenceFlow sourceRef="approveTask" targetRef="decision"/>
        <exclusiveGateway id="decision"/>
        <sequenceFlow sourceRef="decision" targetRef="externalSystemCall">
            <conditionExpression xsi:type="tFormalExpression">
                <![CDATA[
          ${approved}
        ]]>
            </conditionExpression>
        </sequenceFlow>
        <sequenceFlow  sourceRef="decision" targetRef="sendRejectionMail">
            <conditionExpression xsi:type="tFormalExpression">
                <![CDATA[
          ${!approved}
        ]]>
            </conditionExpression>
        </sequenceFlow>
        <serviceTask id="externalSystemCall" name="Enter holidays in external system"
                     flowable:class="org.flowable.CallExternalSystemDelegate"/>
        <sequenceFlow sourceRef="externalSystemCall" targetRef="holidayApprovedTask"/>
        <userTask id="holidayApprovedTask" name="Holiday approved"/>
        <sequenceFlow sourceRef="holidayApprovedTask" targetRef="approveEnd"/>
        <serviceTask id="sendRejectionMail" name="Send out rejection email"
                     flowable:class="org.flowable.SendRejectionMail"/>
        <sequenceFlow sourceRef="sendRejectionMail" targetRef="rejectEnd"/>
        <endEvent id="approveEnd"/>
        <endEvent id="rejectEnd"/>
    </process>
</definitions>

导入相关包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.yyl</groupId>
    <artifactId>FlowableDemoTest</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-engine</artifactId>
            <version>6.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-json-converter</artifactId>
            <version>6.3.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.21</version>
        </dependency>
    </dependencies>
</project>

模块实现

流程部署

流程图部署实现

我们先来看下流程部署的具体过程,代码实现

/**
* 部署流程
*/
@Test
public void testDeploy(){
   ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
   RepositoryService repositoryService = processEngine.getRepositoryService();
   Deployment deploy = repositoryService.createDeployment()
           .addClasspathResource("holiday-request-new.bpmn20.xml")
           .name("请假流程...")
           .category("请假") // 分类
           .tenantId("dpb") // 租户id
           .deploy();
   System.out.println("deploy.getId() = " + deploy.getId());
   System.out.println("deploy.getName() = " + deploy.getName());
   System.out.println("deploy.getCategory() = " + deploy.getCategory());
}

部署过程涉及表结构

其中部署流程需要涉及到的三张表:

部署资源表:act_ge_bytearray

字段 名称 备注
ID_ 主键
REV_ 版本号
NAME_ 名称 部署的文件名称,如:holiday-request-new.bpmn20.xml、holiday-request-new.bpmn20.png
DEPLOYMENT_ID_ 部署ID
BYTES_ 字节(二进制数据)
GENERATED_ 是否系统生成 0为用户上传,
1为系统自动生成, 比如系统会 自动根据xml生 成png

如数据库里所展示:

部署ID表:act_re_deployment

字段 名称 备注
ID_ 主键
NAME_ 名称
CATEGORY_ 分类
TENANT_ID_ 租户ID
DEPLOY_TIME_ 部署时间
DERIVED_FROM_ 来源于
DERIVED_FROM_ROOT_ 来源于
ENGINE_VERSION_ 流程引擎的版本

流程表:act_re_procdef

字段 名称 备注
ID_ 主键
REV_ 版本号
CATEGORY_ 分类 流程定义的Namespace就是类别
NAME_ 名称
KEY_ 标识
VERSION_ 版本
DEPLOYMENT_ID_ 部署ID
RESOURCE_NAME_ 资源名称 流程bpmn文件名称
DGRM_RESOURCE_NAME_ 图片资源名称
DESCRIPTION_ 描述
HAS_START_FORM_KEY_ 拥有开始表单标识 start节点是否存在formKey 0否 1是
HAS_GRAPHICAL_NOTATION_ 拥有图形信息
SUSPENSION_STATE_ 挂起状态 暂停状态 1激活 2暂停
TENANT_ID_ 租户ID

注意:

业务流程定义数据表。此表和ACT_RE_DEPLOYMENT是多对一的关系,即,一个部署的bar包里可能包含多个流程定义文件,每个流程定义文件都会有一条记录在ACT_REPROCDEF表内,每个流程定义的数据,都会对于ACT_GE_BYTEARRAY表内的一个资源文件和PNG图片文件。和ACT_GE_BYTEARRAY的关联是通过程序用ACT_GE_BYTEARRAY.NAME与ACT_RE_PROCDEF.NAME_完成的


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
存储 XML Java
Flowable工作流-高级篇
Flowable工作流-高级篇
4962 0
|
存储 XML 数据库
Flowable 完整表结构说明(一)
Flowable 完整表结构说明
2488 0
|
XML Java 数据库
Flowable入门程序——构建一个命令行程序(一)
Flowable入门程序——构建一个命令行程序
274 0
|
数据可视化 前端开发 Java
SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(图解)(一)
SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(图解)
3138 0
|
8月前
|
存储 Java 数据安全/隐私保护
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
本文介绍了如何使用Flowable 7.0以下版本的flowable-ui进行流程建模、发布和执行。首先,通过解压并启动flowable-ui war包,访问http://localhost:8080/flowable-ui/idm/#/login登录系统。接着,创建并绘制一个简单的绩效流程模型,包含开始节点、任务节点(自评、上级评、隔级评)和结束节点,并为各节点分配处理人。然后,创建应用并发布绩效流程。最后,通过创建a、b、c三个用户分别完成各节点任务,演示了整个流程的执行过程。本文旨在帮助读者理解Flowable的基本操作和流程元素,后续将介绍通过Java代码控制流程的方法。
1215 1
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
|
10月前
|
XML Java 数据库连接
SpringBoot集成Flowable:打造强大的工作流管理系统
在企业级应用开发中,工作流管理是一个核心组件,它能够帮助我们定义、执行和管理业务流程。Flowable是一个开源的工作流和业务流程管理(BPM)平台,它提供了强大的工作流引擎和建模工具。结合SpringBoot,我们可以快速构建一个高效、灵活的工作流管理系统。本文将探讨如何将Flowable集成到SpringBoot应用中,并展示其强大的功能。
1922 1
|
10月前
|
XML 存储 Java
SpringBoot集成Flowable:构建强大的工作流引擎
在企业级应用开发中,工作流管理是核心功能之一。Flowable是一个开源的工作流引擎,它提供了BPMN 2.0规范的实现,并且与SpringBoot框架完美集成。本文将探讨如何使用SpringBoot和Flowable构建一个强大的工作流引擎,并分享一些实践技巧。
1919 0
|
前端开发 数据库 JavaScript
基于Flowable的流程挂接自定义业务表单的设计与实践
文章讨论了如何在Flowable流程引擎中挂接自定义业务表单,以及相关设计和实践的步骤。文章中包含了一些前后端代码示例,如Vue组件的模板和脚本部分,这些代码用于实现与Flowable流程引擎交互的界面。例如,有一个按钮组件用于提交申请,点击后会触发applySubmit方法,该方法会与后端API进行交互,处理流程启动、查询关联流程等逻辑。
52464 11
|
开发框架 Java API
Spring Boot与Flowable的完美整合
【4月更文挑战第20天】
3757 2
|
数据处理 数据安全/隐私保护
Flowable:关于流程部署、启动、处理、完成各模块的浅析(图解)(二)
Flowable:关于流程部署、启动、处理、完成各模块的浅析(图解)
665 0