在Camunda BPM中,第一步就是将对应的流程设计图进行部署,部署完成后,意味着流程将会定义。本次记录流程部署后,流程定义状态激活和挂起的含义。
激活和挂起的含义
-
激活(Active):
- 含义:流程定义处于激活状态时,系统可以基于该定义启动新的流程实例,且已经启动的流程实例可以继续执行。
- 特点:
- 可以启动新的流程实例。
- 已经运行的流程实例可以继续执行。
-
挂起(Suspended):
- 含义:流程定义处于挂起状态时,不能基于该定义启动新的流程实例,且已经启动的流程实例将暂停执行,不能继续进行任何操作,直到流程定义被重新激活。
- 特点:
- 不能启动新的流程实例。
- 已经运行的流程实例将暂停,不能继续执行。
默认行为
当在Camunda中部署一个新的流程定义时,默认情况下它是处于激活状态的。即系统可以立刻基于这个新的流程定义启动流程实例,并且这些实例会按设计正常运行。
激活和挂起的操作
可以通过Camunda的管理接口(例如REST API、Java API)来手动激活或挂起某个流程定义或者流程实例。
- 挂起流程定义:阻止基于该定义启动新的流程实例,并暂停所有已经运行的实例。
- 激活流程定义:允许基于该定义启动新的流程实例,并恢复所有已经挂起的实例。
- 挂起流程实例:暂停该实例的执行。
- 激活流程实例:恢复该实例的执行。
同时在Camunda引擎中,操作流程定义和流程实例时使用的ID不同。
-
流程定义ID(Process Definition ID):
- 这是与某个特定流程定义相关的ID。它标识了一个流程模型的版本。在部署新版本的流程模型时,Camunda会生成一个新的流程定义ID。
- 当希望激活或挂起某个流程定义时,使用的就是流程定义ID。这会影响基于该定义的所有流程实例。
-
流程实例ID(Process Instance ID):
- 这是与某个特定流程实例相关的ID。它标识了某个具体的流程运行实例。
- 当希望激活或挂起某个特定的流程实例时,使用的就是流程实例ID。这只会影响该特定实例,不会影响其他基于同一流程定义的实例。
- 基于Java spring boot下,使用方法如下:
-
/** 挂起指定流程定义 **/ public void suspendProcessDefinition(String processDefinitionId) { repositoryService.suspendProcessDefinitionById(processDefinitionId); } /** 激活指定流程定义 **/ public void activateProcessDefinition(String processDefinitionId) { repositoryService.activateProcessDefinitionById(processDefinitionId); } /** 挂起指定流程实例 **/ public void suspendProcessInstance(String processInstanceId) { runtimeService.suspendProcessInstanceById(processInstanceId); } /** 激活指定流程实例 **/ public void activateProcessInstance(String processInstanceId) { runtimeService.activateProcessInstanceById(processInstanceId); }
-