2、流程部署-上传到服务数据库,查看当前正在执行任务

本文详细介绍了如何使用Activiti工作流引擎进行流程部署,包括单个和多个BPMN文件的部署,查询流程定义信息,检查运行中的任务,删除流程部署以及下载流程资源。通过示例代码展示了每个操作的具体实现,帮助开发者更好地理解和掌握Activiti的工作流程管理。
摘要由CSDN通过智能技术生成

1、部署单个BPMN文件到服务

部署BPMN文件到流程引擎中,一般是Web界面上传 bpmn.xml 文件部署,这里只是模拟读取项目文件夹下的文件进行部署。
在这里插入图片描述

@Test
    public void deploymentTest(){
        //1 创建ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2 获取持久化服务 RepositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //3 部署单个BPMN到Activiti 流程中(上传BPMN文件到数据库)
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("bpmn/MyLeave.bpmn")
                //png 资源命名有规范。MyLeave.myLeave.png|jpg|gif|svg(bpmn名词.流程ID.图片扩展名)
                .addClasspathResource("bpmn/MyLeave.myLeave.png")
                .name("请假流程")
                .deploy();
        log.info("部署的流程ID:"+deployment.getId());
        log.info("部署的流程Name:"+deployment.getName());

    }

2、1次部署多个BPMN文件

有时发布时多个流程文件需要部署时,可以打包文件为ZIP文件,上传这个ZIP文件即可。

 /**
     * 使用ZIP文件,1次部署多个流程PBMN文件
     */
    @Test 
    public void deployProcessByZip(){
        InputStream inputStream=this.getClass()
                .getClassLoader()
                .getResourceAsStream("bpmn/myLeave.zip");

        ZipInputStream zipInputStream=new ZipInputStream(inputStream);

        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();

        Deployment deploy = repositoryService.createDeployment()
                .addZipInputStream(zipInputStream).deploy();
        log.info("流程部署ID:{}",deploy.getId());
        log.info("流程部署Name:{}",deploy.getName());

    }

3、流程定义信息查询

/**
     * 流程定义查询,流程部署到服务后(数据库)。如何从服务中查询具体的流程定义?
     */
    @Test
    public void queryProcessDefinition(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();
        ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();

        List<ProcessDefinition> pdes = processDefinitionQuery.processDefinitionKey("myLeave")
                .orderByProcessDefinitionVersion()
                .desc()
                .list();
        for(ProcessDefinition pd:pdes){
            log.info("流程定义ID:{}",pd.getId());
            log.info("流程定义name:{}",pd.getName());
            log.info("流程定义key:{}",pd.getKey());
            log.info("流程定义version:{}",pd.getVersion());
            log.info("流程部署ID:{}",pd.getDeploymentId());
        }

    }

4、查询流程下正在跑的任务

/**
     * 查询指定流程下是否有实例正在跑,还没有执行完成,流程执行到了哪一步?
     * 请假流程有实例正在跑,这里就会查询到
     */
    @Test
    public void queryProcessInstance(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RuntimeService runtimeService = processEngine.getRuntimeService();

        List<ProcessInstance> pis = runtimeService.createProcessInstanceQuery()
                .processDefinitionKey("myLeave")
                .list();
        for(ProcessInstance pi:pis){
            log.info("流程实例ID:{}",pi.getProcessInstanceId());
            log.info("所属流程定义ID:{}",pi.getProcessDefinitionId());
            log.info("是否执行完成:{}",pi.isEnded());
            log.info("是否暂停:{}",pi.isSuspended());
            log.info("当前活动标识:{}",pi.getActivityId());
            //一般用BusinessKey 和业务某个ID进行关联,从而流程和业务关联在一起
            log.info("当前业务关键字:{}",pi.getBusinessKey());
        }

    }

5、删除流程部署信息

废弃的流程信息需要从服务器中删除部署信息。

/**
     * 删除流程部署,部署后的流程可删除
     */
    @Test
    public void deleteDeployment(){
        //流程部署Id
        String deploymentId="17501";

        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();

        //根据流程部署ID,从数据库中删除流程部署。用于废弃的流程删除部署,后续不会再开启流程
        repositoryService.deleteDeployment(deploymentId);
        //如果当前流程部署下有流程实例还没有跑完,是不允许删除的,会报错。这里可强制删除,内部会级联删除,把相关信息都会删除。
//        repositoryService.deleteDeployment(deploymentId,true);
    }

6、流程资源下载

有时业务系统需要展示流程图或流程文件信息时,需要下载页面展示

 /**
     * 下载流程资源文件信息
     * 一般是在业务修改中下载流程定义文件,用于业务系统展示流程图 等业务
     */
    @Test
    public void loadBpmnFile() throws IOException {
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();

        //查询到流程定义信息
        ProcessDefinition pDef = repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey("myLeave")
                .singleResult();
        String deploymentId = pDef.getDeploymentId();
        //下载流程图和流程定义文件
        InputStream pngInput = repositoryService.getResourceAsStream(deploymentId, pDef.getDiagramResourceName());
        InputStream bpmnInput = repositoryService.getResourceAsStream(deploymentId, pDef.getResourceName());
        //保存到本地
        FileOutputStream pngOut=new FileOutputStream(new File("/Volumes/work/test/myLeave.png"));
        FileOutputStream bpmnOut=new FileOutputStream(new File("/Volumes/work/test/myLeave.bpmn"));
        IOUtils.copy(pngInput,pngOut);
        IOUtils.copy(bpmnInput,bpmnOut);

        pngInput.close();
        bpmnInput.close();
        pngOut.close();
        bpmnOut.close();
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值