美文网首页
activiti7+springboot2.1.x删除流程部署(

activiti7+springboot2.1.x删除流程部署(

作者: zhanghaolian | 来源:发表于2020-01-11 21:43 被阅读0次

    接着前面的文章继续讲,这一节我们将要介绍删除一个流程部署。

    前面的文章都是围绕创建流程以及查看资源,获得资源或者处理任务来 。在实际的开发或者生产中,不可能都只是定义流程,部署流程,而不出现什么错误或者调整。当出现什么流程不满足某些特定要求时,难免会用到删除流程的相关操作。

    和部署流程一样,删除一个流程部署也是要用到RepositoryService。

     /**
         * 删除一个流程部署
         */
        @Override
        public void deleteProcDeployment(){
            //找出部署的流程
            Deployment deployment = repositoryService.createDeploymentQuery().deploymentName("请假流程").singleResult();
    
            //删除流程定义,流程部署,以及二进制的资源记录
            repositoryService.deleteDeployment(deployment.getId());
        }
    

    由于上一节中的流程并没有执行完,所以直接删除这个流程部署,会抛出异常。

    SQL: delete from ACT_RE_PROCDEF where DEPLOYMENT_ID_ = ?
    Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (activity.act_ru_execution, CONSTRAINT ACT_FK_EXE_PROCDEF FOREIGN KEY (PROC_DEF_ID_) REFERENCES act_re_procdef (ID_))

    如果一个流程定义或者部署下面还有未执行完的流程实例,强制删除,会造成后续的流程执行过程找不到关联的部署信息。如果非要前置删除则会连同所有的未完成的流程步骤一起级联删除。
    这里会用到RepositoryService的deleteDeployment方法的一个重载方法。deleteDeployment(String deploymentId, boolean cascade)级联删除。

    不过这里我面还是先把上一节未跑完的流程跑完。顺便看下跑完流程数据库标有什么变化。方法还是和之前的一样。
    完成所有用户任务后,会发现所有的act_ru_的表数据都是空的 。这也从侧面说明了ru表都是存放运行时的数据,这样运行时数据就不会太多,以保证运行时的效率。
    同时act_hi_
    表所有的任务都有了endtime.

    image.png
    image.png

    接下来我面继续执行上面的删除流程部署的操作。会发现执行成功,不再会抛出异常。同时所有的历史记录表里面的数据并不会删除,删除的只有流程部署所影响的3张表。
    act_re_deployment:

    image.png
    act_re_procdef: image.png
    act_ge_byteArray: image.png

    本节结束。

    相关文章

      网友评论

          本文标题:activiti7+springboot2.1.x删除流程部署(

          本文链接:https://www.haomeiwen.com/subject/ccpbactx.html