小编今天带大家了解flowable工作流引擎迁移API实例分析,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“flowable工作流引擎迁移API实例分析”的知识吧。
流程迁移API服务类可以通过流程引擎类进行获取,如下所示:
processMigrationService = processEngine.getProcessMigrationService();
注意:只有Flowable6.5以及以上的版本才可以使用该功能。
通过processMigrationService可以使用如下的API:
ProcessInstanceMigrationBuilder createProcessInstanceMigrationBuilder(); ProcessInstanceMigrationBuilder createProcessInstanceMigrationBuilderFromProcessInstanceMigrationDocument(ProcessInstanceMigrationDocument document); ProcessInstanceMigrationValidationResult validateMigrationForProcessInstance(String processInstanceId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); ProcessInstanceMigrationValidationResult validateMigrationForProcessInstancesOfProcessDefinition(String processDefinitionId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); ProcessInstanceMigrationValidationResult validateMigrationForProcessInstancesOfProcessDefinition(String processDefinitionKey, int processDefinitionVersion, String processDefinitionTenantId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); void migrateProcessInstance(String processInstanceId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); void migrateProcessInstancesOfProcessDefinition(String processDefinitionId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); void migrateProcessInstancesOfProcessDefinition(String processDefinitionKey, int processDefinitionVersion, String processDefinitionTenantId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); Batch batchMigrateProcessInstancesOfProcessDefinition(String processDefinitionId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); Batch batchMigrateProcessInstancesOfProcessDefinition(String processDefinitionKey, int processDefinitionVersion, String processDefinitionTenantId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); ProcessInstanceBatchMigrationResult getResultsOfBatchProcessInstanceMigration(String migrationBatchId);
上述的一系列API可以归纳为如下几种:
创建迁移计划(ProcessInstanceMigrationBuilder),该实例对象中可以设置一系列的迁移逻辑,比如将那个版本下面的实例迁移到特定版本的模板中
validateXX验证是否可以执行迁移逻辑。
migrateProcessInstance开头的方法,同步执行迁移计划,调用该API之后,引擎立即开始执行迁移工作。
batchMigrateXX开头的,批处理迁移实例。当需要迁移非常多实例的时候,可以使用批处理进行操作。该操作需要开启定时器,否则不生效。
getResultsOfBatchProcessInstanceMigration:获取批处理的执行结果。
接下来,以两个版本的流程为例对流程实例迁移功能展开说明:
版本1的流程图:
<process id="a2" name="2" isExecutable="true"> <documentation>2</documentation> <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent> <userTask id="sid-A8596132-C632-4DB0-81D6-5603D6516F3C" name="1" flowable:formFieldValidation="true"></userTask> <sequenceFlow id="sid-980E4499-6E2A-480E-B7F9-E8FD07914D49" sourceRef="startEvent1" targetRef="sid-A8596132-C632-4DB0-81D6-5603D6516F3C"></sequenceFlow> <endEvent id="sid-9203A5B1-FED5-429A-8039-0089AE3132A8"></endEvent>
版本2的流程:
<startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent> <userTask id="sid-A8596132-C632-4DB0-81D6-5603D6516F3C" name="1" flowable:formFieldValidation="true"></userTask> <sequenceFlow id="sid-980E4499-6E2A-480E-B7F9-E8FD07914D49" sourceRef="startEvent1" targetRef="sid-A8596132-C632-4DB0-81D6-5603D6516F3C"></sequenceFlow> <userTask id="sid-84BBB613-FB20-430B-B4C1-E60F4DA02CFB" name="2" flowable:formFieldValidation="true"></userTask> <sequenceFlow id="sid-89B1A448-65D7-4222-B666-541DAB61BC01" sourceRef="sid-A8596132-C632-4DB0-81D6-5603D6516F3C" targetRef="sid-84BBB613-FB20-430B-B4C1-E60F4DA02CFB"></sequenceFlow> <endEvent id="sid-3101266D-CB58-4A8B-A3B1-B880F3C1D936"></endEvent>
版本2的流程比版本1的流程多了一个任务节点,其他的元素均一样。
演示视频可以参考视频:
操作如下:
/** * 1 */ @Test public void deploy(){ ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); System.out.println(processEngine); RepositoryService repositoryService = processEngine.getRepositoryService(); //taskWithEventProcess.bpmn20.xml repositoryService .createDeployment() .addClasspathResource("processMigrationService/2.1.bpmn20.xml") .deploy(); runtimeService.startProcessInstanceByKey("a2"); }
上述代码中部署流程之后,立即启动了新的实例。目前实例位于1节点。
接下来开始部署2流程,并实现将1节点迁移到版本为2的2节点中。代码如下:
@Test public void batchMigrateProcessInstancesOfProcessDefinition2(){ String processDefinitionKey="a2"; int processDefinitionVersion=1; String processDefinitionTenantId=""; ProcessInstanceMigrationDocumentImpl processInstanceMigrationDocument =new ProcessInstanceMigrationDocumentImpl(); processInstanceMigrationDocument.setMigrateToProcessDefinition(processDefinitionKey,2); List<ActivityMigrationMapping> activityMigrationMappings = new ArrayList<ActivityMigrationMapping>(); ActivityMigrationMapping.OneToOneMapping mappingFor = ActivityMigrationMapping.createMappingFor("sid-A8596132-C632-4DB0-81D6-5603D6516F3C", "sid-84BBB613-FB20-430B-B4C1-E60F4DA02CFB"); activityMigrationMappings.add(mappingFor); processInstanceMigrationDocument.setActivityMigrationMappings(activityMigrationMappings); processMigrationService .migrateProcessInstance("12505",processInstanceMigrationDocument); }
Flowable 流程实例迁移功能相比与Camunda而言,功能更加的薄弱和单一。可能有些功能跟商业版有关系,因此开源出来的功能比较单一。没有Camunda那么强大。
Flowable 流程实例迁移功能对于查询做的还不够完善,没有大量的查询逻辑,不方便用户根据特定场景进行操作。
对于批处理模块,没有Camunda强大,因次Flowable开源版本仅支持实例的批量迁移,而不支持其他的批处理操作。
Flowable开源版本批量迁移实例之后,原有的历史数据会被删除掉,Camunda不会删除历史数据。因此在Flowable中使用该功能的时候一定要小心,防止历史数据被清除掉。整个完整实例树痕迹不会保留。
Flowable开源版本可以进行任意数据的迁移,Camunda会对迁移的源节点和目标节点进行对比,如果不在一个区间就不让迁移。Flowable控制的不严格。
Camunda支持在迁移的过程中去设置异步或者同步执行,Flowable不支持。
Camunda支持在迁移的过程中去设置是否删除原有实例数据信息,Flowable不支持。
Camunda支持在迁移的过程中去设置是否可以触发节点监听器逻辑,Flowable不支持。
均支持开发人员设置批量处理任务的阈值和速率。
感谢大家的阅读,以上就是“flowable工作流引擎迁移API实例分析”的全部内容了,学会的朋友赶紧操作起来吧。相信亿速云小编一定会给大家带来更优质的文章。谢谢大家对亿速云网站的支持!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。