camunda流程迁移

为什么要流程迁移?

当我们想要去更新一个流程时,只能先发布一个新的版本,而发布的新版本流程不会去影响正在执行的流程,只有新发起的流程才会去走新版本的流程
现在有个需求是要让正在执行的流程按照新流程的逻辑运行,就需要使用camunda的流程迁移了

迁移场景

原流程图

新增节点

流程图

//新增节点代码
		String sourceProcessId = "Process_0hnbxpf:3:26f5a597-6f90-11ed-b7f6-d08e790f2b58";//原流程processDefinitionId
		String targetProcessId = "Process_0hnbxpf:4:aa5da81c-6fbd-11ed-8ba6-d08e790f2b58";//新流程processDefinitionId
		//流程迁移计划
        MigrationPlan migrationPlan = runtimeService
                .createMigrationPlan(sourceProcessId, targetProcessId)
                .mapEqualActivities()
                .updateEventTriggers()
                .build();
		//查询原流程正在执行的流程
        List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery().processDefinitionId(sourceProcessId).active().list();
        List<String> processInstanceIds = processInstances.stream().map(e -> e.getProcessInstanceId()).collect(Collectors.toList());
        //迁移正在执行的流程
        MigrationPlanExecutionBuilder migrationPlanExecutionBuilder = runtimeService.newMigration(migrationPlan).processInstanceIds(processInstanceIds)
                .skipCustomListeners()//跳过自定义的监听器
                .skipIoMappings();//跳过io映射
        migrationPlanExecutionBuilder.execute();

删除节点

流程图

//删除节点代码
		String sourceProcessId = "Process_0hnbxpf:3:26f5a597-6f90-11ed-b7f6-d08e790f2b58";//原流程processDefinitionId
		String targetProcessId = "Process_0hnbxpf:4:aa5da81c-6fbd-11ed-8ba6-d08e790f2b58";//新流程processDefinitionId
		String oldNodeKey = "Activity_B";//删除的节点
		String targetNodeKey = "Activity_A";//将oldNodeKey迁移到的目标节点
		//流程迁移计划
        MigrationPlan migrationPlan = runtimeService
                .createMigrationPlan(sourceProcessId, targetProcessId)
				.mapActivities(oldNodeKey, targetNodeKey)
                .mapEqualActivities()
                .updateEventTriggers()
                .build();
		//查询原流程正在执行的流程
        List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery().processDefinitionId(sourceProcessId).active().list();
        List<String> processInstanceIds = processInstances.stream().map(e -> e.getProcessInstanceId()).collect(Collectors.toList());
        //迁移正在执行的流程
        MigrationPlanExecutionBuilder migrationPlanExecutionBuilder = runtimeService.newMigration(migrationPlan).processInstanceIds(processInstanceIds)
                .skipCustomListeners()//跳过自定义的监听器
                .skipIoMappings();//跳过io映射
        migrationPlanExecutionBuilder.execute();

文章地址 http://zhe-blog.cn/public/blog/30

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值