Flowable实战(三)流程部署管理
一、流程定义的版本
当部署流程定义时,数据库中的流程定义会是这个样子:
id | key | name | version |
---|---|---|---|
myProcess:1:676 | myProcess | My important process | 1 |
如果我们现在部署同一个流程的更新版本(例如修改部分用户任务),且保持流程定义的id不变,那么流程定义表中会包含下面的记录:
id | key | name | version |
---|---|---|---|
myProcess:1:676 | myProcess | My important process | 1 |
myProcess:2:870 | myProcess | My important process | 2 |
当调用执行流程时,会使用版本2的流程定义,因为这是这个流程定义的最新版本。
二、流程部署方式
2.1 指定项目内资源文件部署
比如在resources/下新建资源文件single-task.bpmn20.xml
<?xml version="1.0" encoding="UTF-8"?>
<definitionsxmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"xmlns:flowable="http://flowable.org/bpmn"targetNamespace="Examples"><process id="singleTask" name="The One Task Process"><startEvent id="theStart" /><sequenceFlow id="flow1" sourceRef="theStart" targetRef="theTask" /><userTask id="theTask" name="my task" flowable:assignee="zhangsan" /><sequenceFlow id="flow2" sourceRef="theTask" targetRef="theEnd" /><endEvent id="theEnd" /></process></definitions>
部署示例代码:
// 资源路径
String path = "single-task.bpmn20.xml";
// 创建部署构建器
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
// 添加资源
deploymentBuilder.addClasspathResource(path);
// 执行部署
deploymentBuilder.deploy();
// 验证部署
long count = repositoryService.createProcessDefinitionQuery().processDefinitionKey("singleTask").count();
// count等于1,则说明部署成功
只要是在项目class目录下的资源,都可以用这种方式部署。
这种方式一般用于开发测试阶段,真正的生产环境,是通过与web管理页面交互部署。
2.2 springboot自动部署
在springboot环境下,resources/processes目录下的任何BPMN 2.0流程定义都会被自动部署。
2.3 接口方式
实际生产中,我们需要接收前端传回来的流程定义数据,然后更新部署。
下面我们省去前端访问接口参数的展示,仅演示后端处理代码。
// 从前端接收到的XML字符串
// 此处省去xml具体内容,可参考2.1的single-task.bpmn20.xml示例
// 注意将id定义为singleTask2,以便跟2.1的内容作出区别
String text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><definitions...</definitions>";
// 创建部署构建器
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
// 执行部署
deploymentBuilder.addString("single-task2.bpmn20.xml", text).deploy();
// 验证部署
long count = repositoryService.createProcessDefinitionQuery().processDefinitionKey("singleTask2").count();
// count等于1,则说明部署成功
2.4 zip压缩包
当我们需要一次同时部署多个资源时,可以通过zip压缩包的部署方式。
String fileName = "path/multi-task.zip";
ZipInputStream inputStream = new ZipInputStream(new FileInputStream(fileName));repositoryService.createDeployment().name("multi-task.zip").addZipInputStream(inputStream).deploy();
补充:流程定义文件,需要由流程设计器生成。整合流程设计器,可参考:https://blog.csdn.net/JinYJ2014/article/details/122412601
三、流程管理
业务系统的第一步,就是需要一个列表可以浏览和管理流程定义。
3.1 获取已部署流程列表
@Autowired
private RepositoryService repositoryService;public List getDeployList() {List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();return list;
}
3.2 读取流程图片
显然,管理页面需要显示流程图片的功能。
Flowable引擎会在流程部署时,自动生成流程图片。
获取流程图片方法:
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("singleTask").singleResult();String diagramResourceName = processDefinition.getDiagramResourceName();
InputStream imageStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), diagramResourceName);
注意:如果不需要或不希望在部署时生成流程图,可以在流程引擎配置中设置isCreateDiagramOnDeploy参数:
<property name="createDiagramOnDeploy" value="false" />
3.3 读取流程定义的XML
管理界面可增加“显示流程定义代码”功能,即读取显示流程定义的XML内容。
// 根据processDefinitionId查询
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
// 读取资源流,resourceName为前端传回的资源名称
InputStream stream = repositoryService.getResourceAsStream(pd.getDeploymentId(), resourceName);
//读取到的资源流再返回到前端
3.4 删除部署
一个流程定义不是通过流程定义ID删除,而是通过流程定义的部署ID删除。在执行删除时,会将和本次部署有关的资源一起删除。
repositoryService.deleteDeployment(deploymentId, true);
四、小结
本篇介绍了流程定义的版本、部署及管理的使用方法。当然,在实际应用中,还有很多细节需要优化,比如流程定义部署时的去重,分页获取流程列表等等。
Flowable实战(三)流程部署管理相关推荐
- Camunda 实战 :流程部署和发起 (二)
Camunda 实战 :流程部署和发起 上一篇我们讲述了Camunda是如何下载并安装的,这一篇我们来聊一聊Camunda 流程的部署和发起. 同样的先来放上我的电脑环境: macbook macos ...
- (经验总结)flowable工作流_01_流程实例管理
文章目录 一.流程定义管理功能有哪些? 二.删除流程实例会删除哪些表中的数据? 三.流程实例做什么用? 四.流程定义涉及的表 一.流程定义管理功能有哪些? 类名:ApiFlowableProcessI ...
- flowable工作流-BPMN流程部署
BPMN相关基础 在画流程图之前,首先需要了解BPMN的一些基础知识:开始.结束事件.用户任务.任务受让人.任务审核人.网关等一些基础知识,具体可以参考官方文档,介绍的很详细,也比较容易理解.BPMN ...
- flowable实战(二)flowable流程模型管理接口
一.流程模型资源 流程定义文件:文件的命名必须是XXXXbpmn20.xml,注意命名规范,后面必须是bpmn20.xml. 流程定义图片:用BPMN2.0规范定义的各种图形描绘(BMPN2.0的符号 ...
- 基于全生命周期的主数据管理:MDM详解与实战学习03 第三章 主数据管理的关键技术
第三章 主数据管理的关键技术 3.1 数据标准 3.1.1 数据标准的分类 3.1.2 物资类数据标准 1.国际标准 2.国内标准 3.1.3 产品数据标准 3.1.4 财务数据标准 3.2 信息分类 ...
- 《Activiti/Flowable 深入BPM工作流》-流程部署实现方式二
<Activiti/Flowable 深入BPM工作流> ----流程部署实现方式二 一. 问题 流程部署实现方式 ...
- 流程定义和部署管理——流程定义列表
流程定义列表 spring mvc的请求相对路径为:workflow/process-list 注入RepositoryService,它管理发布资源的所有方法: protected Reposito ...
- 大数据虚拟化零起点-4基础运维第三步-部署vCenter Server Virtual Appliance 5.1
在大数据虚拟化零起点基础运维第二步中,我们完成了vSphere5.1的安装.接下来,我们可以开始第三步--部署vCenterServer Virtual Appliance 5.1. 在开始部署之前, ...
- java中bpmn流程图_Java学习之BPMN知识以及Activiti的流程部署
BPMN的介绍 Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和 ...
最新文章
- clock函数返回负值~ (转)
- php bc函数库,PHP高精确度运算BC函数库实例详解
- .NET分布式缓存Memcached测试体验
- 对vector等STL标准容器进行排序操作
- Oracle多个服务各代表什么作用(转)
- 用 LaTeX 排版编程技术书籍的一些个人经验
- 最优化——线性规划中最大规划和最小规划之间的转换
- salad--8||9
- 高一数学集合知识点整理_高一数学知识点总结
- go获取项目内所有proto_gRPC学习之三:初试GO版gRPC开发
- 计算机应用基础自考,自考计算机应用基础
- mysql-查询二-分组与聚合
- linux设置板卡时间,嵌入式VS-RK3288板卡 Linux 修改BOOTDELAY介绍
- 全站 HTTPS 来了(转载)
- SpringBoot注册组件之@Configuration@Bean注解作用及注意点
- ubuntu22.04编译PBRT-v4
- 汉王考勤管理软件mysql数据库配置_汉王人脸通考勤管理软件
- 三大微分中值定理及泰勒中值定理证明
- STM32时钟简介及系统时钟频率的更改方式
- 网站域名服务器加密,网站域名利用https防劫持方法