Activiti网关--并行网关
1、什么是并行网关
并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进 入和外出顺序流的:
fork 分支:
并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。
join 汇聚:
所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。
注意:
如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能。 这时, 网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。
与其他网关的主要区别:
并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。
2、流程定义


3、部署流程
package com.zn; import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test; import java.util.HashMap;
import java.util.Map; public class ActivitiParallelGateway {
/**
* 流程部署
*/
@Test
public void deployment() {
//获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取RepositoryService对象进行流程部署
RepositoryService repositoryService = processEngine.getRepositoryService();
//进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("bmpnfiles/holidayParallelGateway .bpmn") //加载流程文件
.name("请假流程-并行网关") //设置流程名称
.key("holiday")
.deploy(); //部署 //输出部署信息
System.out.println("流程名称:" + deployment.getName());
System.out.println("流程ID:" + deployment.getId());
System.out.println("流程Key:" + deployment.getKey());
}
}
控制台:

数据库:

4、启动流程实例
package com.zn; import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test; import java.util.HashMap;
import java.util.Map; public class ActivitiParallelGateway { /**
* 启动流程实例
*/
@Test
public void startInstance() {
//获取ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取RuntimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
//设置流程变量
Map<String, Object> assMap = new HashMap<>();
assMap.put("num", 3);
//启动流程实例
ProcessInstance holidayGroup = runtimeService.startProcessInstanceByKey("holidayPar", assMap);
System.out.println("流程实例:" + holidayGroup.getId());
}
}
数据库:

5、任务处理
package com.zn; import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test; import java.util.HashMap;
import java.util.Map; public class ActivitiParallelGateway { /*
*任务处理
*/
@Test
public void completeTask(){
//获取ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService对象
TaskService taskService = processEngine.getTaskService();
//查询到自己的任务,然后通过任务ID进行提交
Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhangsan").singleResult();
//任务处理
taskService.complete(task.getId());
}
}
数据库:

6、任务处理
package com.zn; import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test; import java.util.HashMap;
import java.util.Map; public class ActivitiParallelGateway { /*
*任务处理
*/
@Test
public void completeTask(){
//获取ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService对象
TaskService taskService = processEngine.getTaskService();
//查询到自己的任务,然后通过任务ID进行提交
Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("lisi").singleResult();
//任务处理
taskService.complete(task.getId());
}
}
数据库:

7、任务处理
package com.zn; import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test; import java.util.HashMap;
import java.util.Map; public class ActivitiParallelGateway { /*
*任务处理
*/
@Test
public void completeTask(){
//获取ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService对象
TaskService taskService = processEngine.getTaskService();
//查询到自己的任务,然后通过任务ID进行提交
Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhaoliu").singleResult();
//任务处理
taskService.complete(task.getId());
}
}
数据库:

当执行到并行网关时,说明当前流程实例有多个分支在运行;
并行任务不执行不分前后,有任务的负责人去执行即可;
当所有分支达到汇聚结点,并行网关就执行完成了;
8、任务处理
package com.zn; import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test; import java.util.HashMap;
import java.util.Map; public class ActivitiParallelGateway { /*
*任务处理
*/
@Test
public void completeTask(){
//获取ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService对象
TaskService taskService = processEngine.getTaskService();
//查询到自己的任务,然后通过任务ID进行提交
Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("sunqi").singleResult();
//任务处理
taskService.complete(task.getId());
}
}
数据库:

9、任务处理
package com.zn; import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test; import java.util.HashMap;
import java.util.Map; public class ActivitiParallelGateway { /*
*任务处理
*/
@Test
public void completeTask(){
//获取ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService对象
TaskService taskService = processEngine.getTaskService();
//查询到自己的任务,然后通过任务ID进行提交
Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhouba").singleResult();
//任务处理
taskService.complete(task.getId());
}
}
数据库:

执行完成后,整个流程就结束:

Activiti网关--并行网关的更多相关文章
- Activiti7 网关(并行网关)
什么是并行网关? 并行网关允许将流程分成多条分支,也可以将多条分支合并到一起,并行网关是基于进入和外出顺序流的 fork分支: 并行后的所有外出顺序流,为每个顺序流都创建一个并发分支 jion汇聚: ...
- activiti入门3排他网关,并行网管,包含网关,事件网关(转)
网关用来控制流程的流向 网关可以消费也可以生成token. 网关显示成菱形图形,内部有有一个小图标. 图标表示网关的类型. 基本分支 首先 利用 流程变量 写个带有分支的一个基本流程 流程图: 部署 ...
- activiti入门3排他网关,并行网管,包括网关,事件网关
网关用来控制流程的流向 网关能够消费也能够生成token. 网关显示成菱形图形,内部有有一个小图标. 图标表示网关的类型. 基本分支 首先 利用 流程变量 写个带有分支的一个基本流程 流程图: wa ...
- Activity并行网关和排他网关
说一说activiti中的排他网关和并行网关 activiti工作流中我们经常用到的网关有两种: 1. Exclusive Gateway 排他网关 排他网关.png 排他网关(也叫异或(XOR)网关 ...
- activiti实战系列 并行网关(parallelGateWay)
流程图 13.2:部署流程定义+启动流程实例 13.3:查询我的个人任务 13.4:完成我的个人任务 说明: 1) 一个流程中流程实例只有1个,执行对象有多个 2) 并行网关的功能是基于进入和外出的 ...
- 并行网关 Parallel Gateway
并行网关 Parallel Gateway 作者:Jesai 2018年3月25日 00:26:21 前言: 做工作流时间长后,慢慢的就会发现,很多客户会需要会签的功能,会签的情况也有很多种,实现的方 ...
- Activiti网关--包含网关
1.什么是包含网关 包含网关可以看做是排他网关和并行网关的结合体:和排他网关一样,你可以在外出顺序流上定义条件,包含网关会解析它们:但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关一样,包 ...
- Activiti7 网关(包含网关)
什么是包含网关? 包含网关可以看做是排他网关和并行网关的结合体,和排他网关一样,你可以在外出顺序流上定义条件,包含网关会解析他们,但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关是一样的 ...
- Activiti7 网关(排他网关)
什么是排他网关? 排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用于在流程中实现决策,当流程执行到这个网关,所有分支都会判断条件是否为true,如果为true则执行该分支 注意:排他网关 ...
随机推荐
- Python一键转Jar包,Java调用Python新姿势!
粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 本文结构: 需求背景 进击的Python Java和Pytho ...
- python之模块中包的介绍
跨文件夹导入模块 1:有文件夹a,名下有ma功能,在文件夹外调用ma功能的话, 导入import a.ma 运用ma() 或者 from a import ma ma() 2;假定a有多重文件夹,想要 ...
- Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式
一.前言 上一篇我分享了一篇关于 Asp.Net Core 中IdentityServer4 授权中心之应用实战 的文章,其中有不少博友给我提了问题,其中有一个博友问我的一个场景,我给他解答的还不够完 ...
- ubuntu1804自带的vim和vi都是用什么版本?
之前搜索vim一些命令时,经常看到有人说ubuntu自带的vim是是vim.tiny的,功能不全. 什么需要先卸载,再重装,真的是这样吗? 我查了一下,vim的版本号 vim --version vi ...
- 将root用户权限赋予普通用户
将root用户权限赋予普通用户 普通用户想要拥有root用户的权限,必须修改/etc/sudoers文件 ,还必须使用visudo命令修改.一是因为这个命令能防止多个用户同时修改这个文件,二是能进行有 ...
- C语言实现简单计算器小项目
昨天刚安装上devc++,半夜想着练练C语言吧 于是就看到实验楼有一个计算器的项目 之前做过一次,这次写的主要是思路 首先我们先从原理思考jia,实现简单的计算器就要具备加减乘除这些,看普通的计算器也 ...
- Spring教程检视阅读
Spring教程检视阅读 地址 可供参考的教程 <菜鸟学 SSH> <Spring Boot 那些事> <初识 Spring Security> <Sprin ...
- 1分钟,带你上手“Markdown”语法
前言 Markdown 是一种轻量级的标记语言,有 John Gruber 以及Aaron Hillel Swartz 一起编写.Aaron Hillel Swartz 是一个极富传奇的黑客,有兴趣可 ...
- Android开发走过的坑(持续更新)
1 华为 nova真机 打印不出Log 参考资料:http://www.apkbus.com/thread-585228-1-1.html 解决:针对权限问题,我们当然也可以解决的,华为手机在你的拨号 ...
- 曹工说Spring Boot源码(23)-- ASM又立功了,Spring原来是这么递归获取注解的元注解的
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...