当前位置: 首页 > 后端技术 > Java

Flowable实战(三)流程部署管理

时间:2023-04-01 21:53:14 Java

1.流程定义版本部署流程定义时,数据库中的流程定义会是这样的:idkeynameversionmyProcess:1:676myProcess我的重要流程1如果我们现在部署相同的更新版本进程(比如修改一些用户任务),保持进程定义的id不变,那么进程定义表中会包含如下记录:idkeynameversionmyProcess:1:676myProcessMyimportantprocess1myProcess:2:870myProcessMyimportantprocess2调用执行进程时,将使用版本2,因为这是此流程定义的最新版本。2.流程部署方式2.1在项目中指定资源文件部署比如新建一个资源文件single-task.bpmn20.xml部署示例代码://资源路径Stringpath="single-task.bpmn20.xml";//创建部署构建器DeploymentBuilderdeploymentBuilder=repositoryService.createDeployment();//添加资源deploymentBuilder.addClasspathResource(path);//执行部署deploymentBuilder.deploy();//验证部署长计数=repositoryService.createProcessDefinitionQuery().processDefinitionKey("singleTask").count();//count等于1则部署成功开发测试阶段通过web管理页面交互部署真实生产环境.2.2springboot自动部署在springboot环境中,resources/processes目录下的任何BPMN2.0流程定义都会被自动部署。2.3接口方式在实际生产中,我们需要接收前端发回的流程定义数据,然后更新部署。下面我们省略前端访问接口参数的展示,只演示后端处理代码。//前端接收到的XML字符串//这里省略xml的具体内容,请参考2.1的single-task.bpmn20.xml示例//注意id定义为singleTask2,以区别于contentof2.1Stringtext="";//创建部署构建器DeploymentBuilderdeploymentBuilder=repositoryService.createDeployment();//执行部署deploymentBuilder.addString("single-task2.bpmn20.xml",text).deploy();//验证部署longcount=repositoryService.createProcessDefinitionQuery().processDefinitionKey("single-task2").count();//如果计数等于1,则表示部署成功。2.4zip压缩包当我们需要同时部署多个资源时,可以使用zip压缩包部署方式。StringfileName="path/multi-task.zip";ZipInputStreaminputStream=newZipInputStream(newFileInputStream(fileName));repositoryService.createDeployment().name("multi-task.zip").addZipInputStream(inputStream).deploy();补充:流程定义文件需要流程设计者生成。流程设计器集成请参考:https://blog.csdn.net/JinYJ20...3.流程管理业务系统第一步是需要一个列表来浏览和管理流程定义。3.1获取已部署进程列表@AutowiredprivateRepositoryServicerepositoryService;publicListgetDeployList(){Listlist=repositoryService.createProcessDefinitionQuery().list();returnlist;}3.2读取过程图片显然,管理页面需要显示过程图片功能。Flowable引擎会在流程部署时自动生成流程图片。获取流程图片的方法:ProcessDefinitionprocessDefinition=repositoryService.createProcessDefinitionQuery().processDefinitionKey("singleTask").singleResult();StringdiagramResourceName=processDefinition.getDiagramResourceName();InputStreamimageStream=repositoryService.getResourceAsStream(Id)processDefinition。注意:如果部署时不需要或不想生成流程图,可以在流程引擎配置中设置isCreateDiagramOnDeploy参数:3.3读取XML流程定义管理接口可以添加“显示流程定义代码”功能是读取显示流程定义的XML内容。//根据processDefinitionId查询ProcessDefinitionpd=repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();//读取资源流,resourceName为前端返回的资源名称InputStreamstream=repositoryService.getResourceAsStream(pd.getDeploymentId(),resourceName);//读取的资源流返回给前端3.4删除deployment流程定义不是通过流程定义ID来删除的,而是通过流程定义的deploymentID来删除的。删除时,与本次部署相关的资源会一起删除。repositoryService.deleteDeployment(deploymentId,true);4.总结本文介绍了流程定义的版本、部署和管理。当然,在实际应用中,还有很多细节需要优化,比如流程定义部署时的去重,分页获取流程列表等等。