温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

flowable工作流引擎迁移API实例分析

发布时间:2022-01-15 17:33:49 来源:亿速云 阅读:478 作者:柒染 栏目:大数据

小编今天带大家了解flowable工作流引擎迁移API实例分析,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“flowable工作流引擎迁移API实例分析”的知识吧。

流程迁移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:获取批处理的执行结果。

流程迁移API使用

接下来,以两个版本的流程为例对流程实例迁移功能展开说明:
版本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流程

操作如下:

 /**
     * 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 VS Camunda工作流

  1. Flowable 流程实例迁移功能相比与Camunda而言,功能更加的薄弱和单一。可能有些功能跟商业版有关系,因此开源出来的功能比较单一。没有Camunda那么强大。

  2. Flowable 流程实例迁移功能对于查询做的还不够完善,没有大量的查询逻辑,不方便用户根据特定场景进行操作。

  3. 对于批处理模块,没有Camunda强大,因次Flowable开源版本仅支持实例的批量迁移,而不支持其他的批处理操作。

  4. Flowable开源版本批量迁移实例之后,原有的历史数据会被删除掉,Camunda不会删除历史数据。因此在Flowable中使用该功能的时候一定要小心,防止历史数据被清除掉。整个完整实例树痕迹不会保留。

  5. Flowable开源版本可以进行任意数据的迁移,Camunda会对迁移的源节点和目标节点进行对比,如果不在一个区间就不让迁移。Flowable控制的不严格。

  6. Camunda支持在迁移的过程中去设置异步或者同步执行,Flowable不支持。

  7. Camunda支持在迁移的过程中去设置是否删除原有实例数据信息,Flowable不支持。

  8. Camunda支持在迁移的过程中去设置是否可以触发节点监听器逻辑,Flowable不支持。

  9. 均支持开发人员设置批量处理任务的阈值和速率。

感谢大家的阅读,以上就是“flowable工作流引擎迁移API实例分析”的全部内容了,学会的朋友赶紧操作起来吧。相信亿速云小编一定会给大家带来更优质的文章。谢谢大家对亿速云网站的支持!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI