多语言展示
当前在线:139今日阅读:19今日分享:20

activity事件(2)边界定时器事件

边界事件有消息(Message)边界事件、定时器(Timer)边界事件、升级(Escalation)边界事件、错误(Error)边界事件、取消(Cancel)边界事件、补偿(Compensation)边界事件、条件(Conditional)边界事件、信号(Signal)边界事件、组合(Multiple)边界事件和并行组合(Parallel Multiple)边界事件。
工具/原料
1

电脑

2

intelliJ idea,jdk1.8,mysql

方法/步骤
1

本篇只讲其中的定时器边界事件,是因为定时器事件刚刚讲完,讲定时器边界事件会好理解一些。

2

说明:计时器边界事件充当秒表和闹钟。当执行到达附加边界事件的活动时,启动计时器。当计时器触发时(例如,在指定的间隔之后),活动被中断,遵循边界事件。

3

业务场景:适用于限时的业务流程。

4

配置的流程文件主要内容为:                                                                      流程图如下图。

5

测试过程为创建两个流程实例来进行比较,实例1未超时的时候,流程走向是不是task1-》task3,实例2超时的时候,流程走向是不是task1-》task2-》task3。测试代码如下:@Test   public void exe() {       RepositoryService repositoryService = engine.getRepositoryService(); // 部署流程文件       repositoryService.createDeployment()               .addClasspathResource('processes/timerBoundary.bpmn').deploy();       engine.getProcessEngineConfiguration().getAsyncExecutor().start();//注意这句话开启定时器,一定要加       // 启动流程       ProcessInstance processInstance = runtimeService.startProcessInstanceByKey('Process_1');       // 查询第一个任务       Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();       System.out.println('第一实例,当前节点名称' + task.getName());       // 完成第一个任务       taskService.complete(task.getId());       task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();       System.out.println('第一实例,第一个任务完成后:' + task);       //结束流程       taskService.complete(task.getId());        //启动第二个流程实例,第一个任务不执行等触发边界定时器事件后,看任务节点,然后执行再看任务节点       processInstance = runtimeService.startProcessInstanceByKey('Process_1');       task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();       System.out.println('第二实例,当前节点名称' + task.getName());       //定时器那边是20秒,这边设置沉睡30秒       try {           Thread.sleep(1000*70);       } catch (InterruptedException e) {           e.printStackTrace();       }       task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();       System.out.println('第二实例,超时后当前节点名称' + task.getName());       // 完成第一个任务       taskService.complete(task.getId());       task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();       System.out.println('第二实例,任务完成后:' + task);       //结束流程       taskService.complete(task.getId());   } 结果为:第一实例,当前节点名称User Task 1第一实例,第一个任务完成后:Task[id=57509, name=User Task 3]第二实例,当前节点名称User Task 1第二实例,超时后当前节点名称User Task 2第二实例,任务完成后:Task[id=57522, name=User Task 3] 与测试前想的一样。

推荐信息