Springboot +Flowable,三种常见网关的使用(排他、并行、包容网关)(一)
一.简介
Flowable 中常用的网关主要有三种类型,分别是:
- 排他网关
- 并行网关
- 包容网关
下面来说下这三种的网关的概念和用法。
二.排他网关
排他网关,也叫互斥网关,截图如下:

排他网关有一个入口,多个有效出口。
下面举个例子:
假设有一个请假流程,请假 1 天,组长审批,请假小于 3 天,项目经理审批,请假大于 3 天,总监审批,绘制流程图,截图如下:

在这个流程图中,当流程从排他网关出来的时候,设置一个变量,根据变量的值,来决定下一个走哪一个 Task,例如组长审批,做如下配置,截图如下:

这个流条件表示当 days 这个变量的值小于等于 1 的时候,就会进入到组长审批这个 Task。
以此类推,设置经理审批,截图如下:

设置总监审批,截图如下:

下载这个XML文件,XML文件的内容如下:
<process id="demo01" name="测试流程" isExecutable="true"><documentation>测试流程</documentation><startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent><exclusiveGateway id="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5"></exclusiveGateway><sequenceFlow id="sid-DF97CC8B-3AD5-447D-AE67-1082CAB7B189" sourceRef="startEvent1" targetRef="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5"></sequenceFlow><userTask id="sid-B4CD08AF-52B5-44F2-AC45-B2F5E154A5F0" name="组长审批" flowable:formFieldValidation="true"></userTask><userTask id="sid-07B7951C-4E76-4639-989C-407C610C5BA8" name="经理审批" flowable:formFieldValidation="true"></userTask><userTask id="sid-1A81B40F-D8D4-4158-B0B9-26DB8FB7DD2E" name="总监审批" flowable:formFieldValidation="true"></userTask><endEvent id="sid-0F56FE56-1A8C-4B47-8F0D-196700DDF7B8"></endEvent><sequenceFlow id="sid-E4B4B580-F078-4BB9-B5D3-966E80737C4C" sourceRef="sid-B4CD08AF-52B5-44F2-AC45-B2F5E154A5F0" targetRef="sid-0F56FE56-1A8C-4B47-8F0D-196700DDF7B8"></sequenceFlow><endEvent id="sid-F05670CB-A8F4-44A3-B53D-46CFB6F65581"></endEvent><sequenceFlow id="sid-3EC62E5D-ACDA-480E-93B4-C24D8F6E9042" sourceRef="sid-07B7951C-4E76-4639-989C-407C610C5BA8" targetRef="sid-F05670CB-A8F4-44A3-B53D-46CFB6F65581"></sequenceFlow><endEvent id="sid-52711414-1769-4EC3-9AE5-6BA426123095"></endEvent><sequenceFlow id="sid-C81500B2-D1EA-429F-8402-A3D8C8CA0E29" sourceRef="sid-1A81B40F-D8D4-4158-B0B9-26DB8FB7DD2E" targetRef="sid-52711414-1769-4EC3-9AE5-6BA426123095"></sequenceFlow><sequenceFlow id="sid-807C7B79-4AFA-4525-847F-4D0FE1C0F0F3" name="小于1天" sourceRef="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5" targetRef="sid-B4CD08AF-52B5-44F2-AC45-B2F5E154A5F0"><conditionExpression xsi:type="tFormalExpression"><![CDATA[${days<=1}]]></conditionExpression></sequenceFlow><sequenceFlow id="sid-3D3DF742-BF47-4536-9EE9-747CD284A1BA" name="1-3天" sourceRef="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5" targetRef="sid-07B7951C-4E76-4639-989C-407C610C5BA8"><conditionExpression xsi:type="tFormalExpression"><![CDATA[${days>1 && days<=3}]]></conditionExpression></sequenceFlow><sequenceFlow id="sid-2AD41E43-AFEC-47A1-B8D1-0B4299434BF8" name="大于3天" sourceRef="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5" targetRef="sid-1A81B40F-D8D4-4158-B0B9-26DB8FB7DD2E"><conditionExpression xsi:type="tFormalExpression"><![CDATA[${days>3}]]></conditionExpression></sequenceFlow></process>
可以看到,在 sequenceFlow 标签中,有一个 conditionExpression 标签,这个标签的内容就是具体的条件了。
接下来部署一下这个流程,代码如下:
@Test
void test01() {Map<String, Object> variables = new HashMap<>();variables.put("days", 3);ProcessInstance pi = runtimeService.startProcessInstanceByKey("demo01", variables);logger.info("id:{},activityId:{}", pi.getId(), pi.getActivityId());
}
注意,这个启动的时候,传入一个 days 变量,系统将来会根据这个变量来决定这个流程要走到哪一个 Task。流程启动成功之后,去查询 ACT_RU_TASK 表,就可以看到流程的执行是否和我们所预想的一致。
相关文章:
Springboot +Flowable,三种常见网关的使用(排他、并行、包容网关)(一)
一.简介 Flowable 中常用的网关主要有三种类型,分别是: 排他网关并行网关包容网关 下面来说下这三种的网关的概念和用法。 二.排他网关 排他网关,也叫互斥网关,截图如下: 排他网关有一个入口,多个有效…...
软考高项(一)信息化发展 ★重点集萃★
1、信息是确定性的增加。信息不是物质,也不是能力。 2、信息的特征与质量,主要包括:客观性、普遍性、无限性、动态性、相对性、依附性、变换性、传递性、层次性、系统性和转化性等。 3、信息的质量属性,主要包括:精确…...
大项目准备(2)
目录 中国十大最具发展潜力城市 docker是什么?能介绍一下吗? 中国十大最具发展潜力城市 按照人随产业走、产业决定城市兴衰、规模经济和交通成本等区位因素决定产业布局的基本逻辑,我们在《中国城市发展潜力排名:2022》研究报告…...
计算机网络【2】 子网掩码
学习大佬记下的笔记 https://zhuanlan.zhihu.com/p/163119376 "子网"掩码,顾名思义,它就是拿来划分子网的,更准确的说,划分子网的同时,还能通过它知道主机在子网里面的具体ip的具体地址。 子网掩码只有一个…...
linux发行家族和发行版及安装软件方式
在Linux平台下,软件包的类型可以划分为两类:源码包、二进制包; 一个软件要在Linux上执行,必须是二进制文件; 源码包:即程序软件的源代码(一般也叫Tarball,即将软件的源码以tar打包后…...
FE_Vue学习笔记 条件渲染[v-show v-if] 列表渲染[v-for] 列表过滤 列表排序
1 条件渲染 v-show v-if 使用template可以使其里面的内容在html的结构中不变。条件渲染: v-if 1)v-if“表达式” 2)v-else-if“表达式” 3)v-else {} 适用于:切换频率较低的场景。特点:不展示的DOM元素直…...
基于C++实现旅行线路设计
访问【WRITE-BUG数字空间】_[内附完整源码和文档] 系统根据风险评估,为旅客设计一条符合旅行策略的旅行线路并输出,系统能查询当前时刻旅客所处的地点和状态(停留城市/所在交通工具)。 实验内容和实验环境描述 1.1 实验内容 城…...
Lenovo m93 mini 电脑 Hackintosh 黑苹果efi引导文件
原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔) 硬件型号驱动情况 主板Lenovo m93 mini 处理器Intel i5-4590T 2.20GHz (35w) 4-core/4-thread已驱动 内存8GB (2x4) DDR3 1600MHz已驱动 硬盘2.5" SSD Samsung 8…...
【论文阅读】COPA:验证针对中毒攻击的离线强化学习的稳健策略
COPA: Certifying Robust Policies for Offline Reinforcement Learning against Poisoning Attacks 作者:Fan Wu, Linyi Li, Chejian Xu 发表会议:2022ICRL 摘要 目前强化学习完成任务的水平已经和人类相接近,因此研究人员的目光开始转向…...
Java笔记_18(IO流)
Java笔记_18 一、IO流1.1、IO流的概述1.2、IO流的体系1.3、字节输出流基本用法1.4、字节输入流基本用法1.5、文件拷贝1.6、IO流中不同JDK版本捕获异常的方式 二、字符集2.1、GBK、ASCII字符集2.2、Unicode字符集2.3、为什么会有乱码2.4、Java中编码和解码的代码实现2.5、字符输…...
前端vue3一键打包发布
一键打包发布可以分为两种,一是本地代码,编译打包后发布至服务器,二是直接在服务器上拉去代码打包发布至指定目录中。 两种各有使用场景,第一种是前端开发自己调试发布用的比较多,第二种是测试或者其他人员用的多&…...
13 | visual studio与Qt的结合
1 前提 Qt 5.15.2 visual studio 2019 vsaddin 2.8 2 具体操作 2.1 visual studio tool 2.1.1 下载 https://visualstudio.microsoft.com/zh-hans/downloads/2.1.2 安装 开发...
纯手动搭建大数据集群架构_记录019_集群机器硬盘爆满了_从搭建虚拟机开始_做个200G的虚拟机---大数据之Hadoop3.x工作笔记0179
今天突然就发现,使用nifi的时候集群满了...气死了.. 而在vmware中给centos去扩容,给根目录扩容,做的时候,弄了一天...最后还是报错, 算了从头搭建一个200G的,希望这次够用吧.后面再研究一下扩容的问题. 2023-05-12 11:06:48 原来的集群的机器,硬盘太小了,扩容不知道怎么回事…...
变量大小:—揭开不同类型的字节数
变量大小:一一揭开不同类型的字节数 在编程中,我们会使用各种类型的变量来存储数据,但是你是否知道这些变量在内存中所占用的字节数是多少呢?随着不同编程语言和不同的操作系统,这些变量的字节数可能会有所不同。在本…...
23.自定义指令
像是 v-if,v-for,v-model 这些是官方指令,vue允许开发者自定义指令 目录 1 mounted 1.1 基本使用 1.2 第一个形参 1.3 第二个形参 2 updated 3 函数简写 4 全局自定义指令 1 mounted 当指令绑定到元素身上的时候,就会自动触发mounted()…...
OPNET Modeler 例程——停等协议的建模和仿真
文章目录 一、概述二、链路模型和包格式创建三、进程模型1.src 进程模型2.sink 进程模型 四、节点模型五、网络模型六、仿真结果 一、概述 本例程是在 OPNET Modeler 中对停等协议的建模和仿真,其中停等协议的操作过程如下: (1)发…...
JavaScript - 基础+WebAPI(笔记)
前言: 求关注😭 本篇文章主要记录以下几部分: 基础: 输入输出语法;数据类型;运算符;流程控制 - 分支语句;流程控制 - 循环语句;数组 - 基础;函数 - 基础&…...
API调用的注意事项及好处!
API调用是指一个软件系统通过预定格式、协议和框架,向另一个软件系统发送请求并获得响应的过程。 在进行API调用时需要注意以下事项: 1. 认真阅读API文档:在调用API前,一定要认真仔细地阅读相关的API文档,了解API接口…...
ros2中常用命令,与ros1的区别
文章目录 1. ros1 中的rosrun tf tf_echo 在ros2中使用办法2. rqt 中 tf 树的查看3. roscd 在ros2中使用办法4. ros2获取时间的方法: 1. ros1 中的rosrun tf tf_echo 在ros2中使用办法 # ros2 run tf2_ros tf2_echo [reference_frame] [target_frame] ros2 run tf2…...
利用MySQL语句批量替换指定wordpress文章中的图片路径
很多时间我们将服务器中的图片下载到本地,然后删掉,但是有一个问题就是,所有文章中的图片路径还是以前的,没有根据域名来。导致下午某些时间段图片都是无法显示的,后来想到用MySQL直接批量替换,执行才不到1…...
UWB定位算法避坑指南:如何避免常见错误并提升定位精度(含2025最新优化技巧)
UWB定位算法避坑指南:如何避免常见错误并提升定位精度(含2025最新优化技巧) 在工业4.0和智能物联网的浪潮中,超宽带(UWB)技术凭借其厘米级高精度定位能力,正在重塑智能制造、仓储物流和医疗监护…...
关于准备智慧校园建设专项资金申报材料的参考清单
✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…...
仿真波形截图](https://example.com/waveform.jpg
永磁同步电机全速域无位置传感器控制仿真,高频注入改进滑膜控制,PMSM矢量控制仿真 1,在零低速域,采用无数字滤波器高频方波注入法,减少滤波的相位影响,且对凸极性要求不高; 2,在中高…...
基于MATLAB的车牌识别之旅:模板匹配法实战
基于MATLAB,使用模板匹配法实现车牌的识别 具体包括将原图灰度化,边缘检测,腐蚀操作,车牌区域定位,车牌区域矫正,二值化,均值滤波,切割,字符匹配,最终显示车牌…...
Megatron-LM源码解析:Tensor与Sequence并行训练中的通信优化策略
1. Megatron-LM并行训练基础概念 在分布式训练领域,Megatron-LM已经成为大规模语言模型训练的事实标准框架。我第一次接触这个框架时,就被它精妙的并行设计所震撼。Tensor并行和Sequence并行是其中两种核心并行策略,理解它们的通信机制对优化…...
UI-Grid 终极贡献指南:如何从零开始参与开源项目并提交完美代码
UI-Grid 终极贡献指南:如何从零开始参与开源项目并提交完美代码 【免费下载链接】ui-grid UI Grid: an Angular Data Grid 项目地址: https://gitcode.com/gh_mirrors/ui/ui-grid UI-Grid 作为一款基于 Angular 的数据表格组件,为开发者提供了强大…...
解决PySide6中Qt Designer UI空白问题
在使用PySide6开发桌面应用程序时,经常会遇到将Qt Designer设计的UI文件集成到Python代码中的问题。本文将通过一个实际案例来探讨如何解决UI显示空白的问题。 问题背景 假设你已经用Qt Designer设计了一个复杂的用户界面,包含了多个标签页(QTabWidget),每个标签页内有可…...
深度解析:利用pmap+gdb精准诊断Linux进程内存异常
1. 为什么需要pmapgdb组合排查内存问题 第一次遇到线上服务内存爆涨时,我盯着top命令里那个不断攀升的RES数值束手无策。传统的内存监控工具就像医院的体温计,只能告诉你"发烧了",但查不出具体病因。这就是pmap和gdb这对"黄金…...
从0到1落地智能仓储:C#上位机+Modbus RTU实现AGV集群调度与货物自动分拣
本文是纯实战、可直接落地的智能仓储完整方案,基于C# .NET 6 + Modbus RTU/Modbus TCP + AGV调度 + 自动分拣,从零搭建一套轻量级、低成本、高可靠的智能仓储系统,适用于电商仓库、工厂原料仓、成品仓、立体库。 无废话、无虚架构,代码可直接复制运行,适合新手从0到1上手智…...
告别重复造轮子,用快马ai一键生成rabbitmq多模式高效代码模板
最近在项目中频繁使用RabbitMQ处理消息队列,发现手动编写各种模式的代码既耗时又容易出错。特别是当业务需要切换不同消息模式时,往往要重新查阅文档、调试参数。经过一番摸索,我总结出一套高效使用RabbitMQ的方法,并借助InsCode(…...
