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

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

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

和部署流程一样,删除一个流程部署也是要用到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删除流程部署(六))