Flowable中的网关其实有很多种。常见的有三种,即:独占网关、并行网关、包容网关。这三者中最常用的当然是专属网关了。今天宋哥就来和朋友们聊聊这三个网关,一起来感受一下这三个网关各自的特点。1、独占网关首先是独占网关,也叫互斥网关,如下图所示:独占网关可以有N个入口,但只有一个有效出口。宋大哥举个例子:假设我有一个请假流程,请假1天,组长审批,小于3天,项目经理审批,大于3天天,主任批准了。基于此,我们可以画出如下流程图:在这个流程图中,当进程从独占网关出来的时候,我们设置一个变量,根据变量的值来决定下一步去哪个Task,比如组长的认可。我们做如下配置:这个流水条件表示当days这个变量的值小于等于1时,这个任务就会被组长批准。同理,我们设置经理审批:最后,主管审批的条件如下:最后,我们看一下这个流程对应的XML文件,如下:测试流程userTaskid="sid-B4CD08AF-52B5-44F2-AC45-B2F5E154A5F0"name="TeamLeaderApproval"flowable:formFieldValidation="true">1&&天<=3}]]>3}]]>可以看到sequenceFlow标签中,有一个conditionExpression标签,这个标签的内容就是具体的条件现在,我们来部署这个流程,然后启动如下:@Testvoidtest01(){Mapvariables=newHashMap<>();variables.put("days",3);ProcessInstancepi=runtimeService.startProcessInstanceByKey("demo01",variables);logger.info("id:{},activityId:{}",pi.getId(),pi.getActivityId());}注意这个在启动的时候会传入一个days变量,系统会根据这个变量来判断进程以后会去到哪个Task。进程启动成功后,我们可以观察到通过观察ACT_RU_TASK表的过程是否和我们预期的一致?2.并行网关并行网关,从名字就可以看出,这种网关一般用在并行任务中,并行网关如下图所示:并行网关一般成对出现,一个出现第一个并行网关用于拆分,第二个并行网关用于聚合。我画了一个简单的并行网关的例子,如下图:朋友们可以看出来这是一个简化的生产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">建模器:启动器可以完成>;现在我们部署这个进程,启动进程成功,我们发现ACT_RU_TASK表中有两个Task,需要执行,如下图:如果这两个Task只执行了一个,那么还剩下一个Task,如果两个都执行了,那么会看到一个新的Task。如下图(后两个并行任务的执行,进入下一个任务):嗯,这就是并行网关。3.包容网关包容网关,有时也叫兼容网关,兼容网关等,如下图:包容什么?包含独占网关和并行网关。也就是说,这种包容网关可以根据实际情况转换成独占网关或并行网关。例如:报销金额大于500,张三审批,报销金额大于1000,则需要张三和李四同时审批,张三和李四审批不分先后。基于此,我画出如下流程图:报销金额大于500设置如下条件:报销金额大于1000设置如下条件:接下来我们来部署这个流程。部署完成后,我们首先启动流程。第一次启动时,我们设置报销金额为666,如下:@Testvoidtest01(){Mapvariables=newHashMap<>();variables.put("钱",666);ProcessInstancepi=runtimeService.startProcessInstanceByKey("demo01",变量);logger.info("id:{},activityId:{}",pi.getId(),pi.getActivityId());}进程启动后,我们在ACT_RU_TASK表中可以看到,到了zhangsanapprove,如下:zhangsanapproved之后,就是wangwuapprove,所以我就不演示了。假设我们启动流程时,报销金额为2000,如下:@Testvoidtest01(){Mapvariables=newHashMap<>();variables.put("钱",2000);ProcessInstancepi=runtimeService.startProcessInstanceByKey("demo01",变量);logger.info("id:{},activityId:{}",pi.getId(),pi.getActivityId());}那么此时你会看到,在ACT_RU_TASK表中,有两条记录,分别是分别是张三批和李四批。这时候这两个审批就是一个平行任务:接下来就是按照并行任务模式,只有经过这两个人的审批,才能进入到王屋进行审批。这就是兼容网关的特点,即会根据实际情况成为独占网关或并行网关。好了,常用的三种网关就分享完了,有兴趣的可以试试~