这里我们先在工作流引擎中加入一张bpmn图例(实际为xml)
image
然后使用如下代码进行部署

   ProcessEngine processEngine = configuration.buildProcessEngine();
    var deployment =
        processEngine
            .getRepositoryService()
            .createDeployment()
            .addClasspathResource("bpmn/MyProcess.bpmn20.xml")
            .name("iPisces42的测试流程")
            .deploy();
    System.out.println("deployment.getId() = " + deployment.getId());
    System.out.println("deployment.getName() = " + deployment.getName());

然后可以在数据库中
flowable.act_re_deployment中可以看到
image-1650109051268
可以在act_re_procdef中看到
image-1650109105095
注:bpmn的流程标识(id)会对应procdef中的key,name会对应procdef中的name

在act_ge_bytearray中则加入了image-1650109488247
注:这里GENERATED_为1的为引擎自动生成的一张图片,不过数据库存图片总是怪怪的

任务挂起

这里我们测试以下任务的挂起与激活

  @Test
 void testSuspended() {
   var processDefinition =
       repositoryService
           .createProcessDefinitionQuery()
           .processDefinitionId("MyPorcess:1:7504")
           .singleResult();
   var suspended = processDefinition.isSuspended();
   if (suspended) {
     repositoryService.activateProcessDefinitionById(processDefinition.getId());
   } else {
     repositoryService.suspendProcessDefinitionById(processDefinition.getId());
   }
 }

同时也测试以下挂起的ProcessDefinition是否可以新建ProcessInstance

 @Test
void testSuspend(){
  runtimeService.startProcessInstanceById("MyPorcess:1:7504", "测试挂起能否启动新的流程实例");
}

这里明显是报错了

org.flowable.common.engine.api.FlowableException: Cannot start process instance. Process definition MyProcess (id = MyPorcess:1:7504) is suspended

我们这里先激活ProcessDefinition然后开启一个ProcessInstance,这里测试以下PeocessInstance是否可以继续执行

依旧使用上面两个测试用例,先将流程定义激活,然后再启动实例,然后再将流程定义挂起,加入新的测试用例

  @Test
 void testTask(){
   taskService.complete("4c80ac89-bd7f-11ec-b304-1c99571ca913");
 }

测试能否完成任务

image-1650111745070
第二张图是 实例实例的挂起状态,这里测试可知,流程定义挂起并不会影响到已启动的流程实例(激活状态)下的任务
image-1650111765595

这里我们将流程实例也进行挂起,重新测试task是否可以执行

  @Test
void testSuspendProcessInstance() {
  runtimeService.suspendProcessInstanceById("4c7bf194-bd7f-11ec-b304-1c99571ca913");
}
  @Test
void testTask() {
  taskService.complete("add709b1-bd7f-11ec-9dd0-1c99571ca913");
}

org.flowable.common.engine.api.FlowableException: Cannot complete a suspended task

这里报错了,说明ProcessInstacne挂起后,并不能执行task

如果我们需要挂起一个PeocessDefinition同时还需要旧的ProcessDefinition下的PeocessInstace 我们可以使用这个方法,将第二个参数设置为false,这样就不会影响到关联的流程实例
image-1650112741189

Q.E.D.