Flowable中的网关其实有很多种。常见的有三种,即:独占网关、并行网关、包容网关。这三者中最常用的当然是专属网关了。今天宋哥就来和朋友们聊聊这三个网关,一起来感受一下这三个网关各自的特点。1、独占网关首先是独占网关,也叫互斥网关,如下图所示:独占网关可以有N个入口,但只有一个有效出口。宋大哥举个例子:假设我有一个请假流程,请假1天,组长审批,小于3天,项目经理审批,大于3天天,主任批准了。基于此,我们可以画出如下流程图:在这个流程图中,当进程从独占网关出来的时候,我们设置一个变量,根据变量的值来决定下一步去哪个Task,比如组长的认可。我们做如下配置:这个流水条件表示当days这个变量的值小于等于1时,这个任务就会被组长批准。同理,我们设置经理审批:最后,主管审批的条件如下:最后,我们看一下这个流程对应的XML文件,如下:测试流程userTaskid="sid-B4CD08AF-52B5-44F2-AC45-B2F5E154A5F0"name="TeamLeaderApproval"flowable:formFieldValidation="true">用户T问><条件xsi:type="tFormalExpression">1&&days<=3}]]>3}]]>可以看到在sequenceFlow标签中,有一个conditionExpression标签,这个标签的内容就是具体情况现在,让我们部署这个流程并按如下方式启动它:@Testvoidtest01(){Mapvariables=newHashMap<>();variables.put("天数",3);ProcessInstancepi=runtimeService.startProcessInstanceByKey("demo01",变量);logger.info("id:{},activityId:{}",pi.getId(),pi.getActivityId());}注意这个启动的时候,传入A天变量,系统会判断进程是哪个Task将来会根据这个变量去。流程启动成功后,我们可以观察ACT_RU_TASK表,看看流程的执行是否符合我们的预期。2.ParallelGatewaysParallelGateways大概从名字就可以看出。这种网关一般用于并行任务。并行网关如下图所示:并行网关一般成对出现,一个并行网关用于分流。出现两个并行网关进行聚合。我画了一个简单的并行网关的例子,如下图:朋友们可以看出来这是一个简化的生产notebook的流程图。屏幕和键盘生产出来后,再进行组装。有两个并行网关(成对出现)。在这个流程图中,连接线上不需要设置条件(区别于派塔网关),即使在这里设置了条件,这个条件也不会生效。我们看一下这个并行网关流程图对应的XML文件,如下:"sid-4F7F76BA-526A-4D8C-B45A-02FC1C56CA47"flowable:formFieldValidation="true">="sid-54DD6BFA-FE6C-4DE7-9038-3DEEAF85002C"name="ProductionScreen"flowable:assignee="zhangsan"flowable:formFieldValidation="true">51B239</sequenceFlow>现在我们部署这个进程并成功启动进程,我们发现有两个任务需要待执行,如下图所示:如果只执行了这两个Task中的一个,就会剩下另一个Task。如果两者都执行了,那么你会看到一个新的Task,如下图(两个并行任务执行完后,进入下一个任务):嗯,这就是并行网关。3.Tolerancegateway容忍网关,有时也叫兼容网关、兼容网关等,如下图:容忍谁?包含独占网关和并行网关。也就是说,这个包容网关可以根据实际情况转化为独占网关或者并行网关。举个栗子:报销金额大于500,张三审批,报销金额大于1000,需要张三和李四同时审批,张三和李四审批在no命令。基于此,我画出如下流程图:报销金额大于500设置如下条件:报销金额大于1000设置如下条件:接下来我们来部署这个流程。部署完成后,我们首先启动流程。第一次启动时,我们设置报销金额为666,如下:@Testvoidtest01(){Mapvariables=newHashMap<>();variables.put("钱",666);ProcessInstancepi=runtimeService.startProcessInstanceByKey("demo01",变量);logger.info("id:{},activityId:{}",pi.getId(),pi.getActivityId());}流程启动后,我们在ACT_RU_TASK表中可以看到,到了张三审批,如下:zhangsan认可后,就是wangwu认可,我就不演示了。假设我们启动流程时,报销金额为2000,如下:@Testvoidtest01(){Mapvariables=newHashMap<>();variables.put("钱",2000);ProcessInstancepi=runtimeService.startProcessInstanceByKey("demo01",变量);logger.info("id:{},activityId:{}",pi.getId(),pi.getActivityId());}那么此时你会看到,在ACT_RU_TASK表中,有两条记录,分别是分别是张三批和李四批。这时候这两个审批就是一个平行任务:接下来就是按照并行任务模式,只有经过这两个人的审批,才能进入到王屋进行审批。这就是兼容网关的特点,即会根据实际情况成为独占网关或并行网关。好了,常用的三种网关就分享完了,有兴趣的可以试试~