Flowable实战(三)流程部署管理
2022/1/10 23:08:04
本文主要是介绍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"?> <definitions xmlns="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();
三、流程管理
业务系统的第一步,就是需要一个列表可以浏览和管理流程定义。
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实战(三)流程部署管理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南