电脑
intelliJ idea,jdk1.8,mysql
本篇只讲其中的定时器边界事件,是因为定时器事件刚刚讲完,讲定时器边界事件会好理解一些。
说明:计时器边界事件充当秒表和闹钟。当执行到达附加边界事件的活动时,启动计时器。当计时器触发时(例如,在指定的间隔之后),活动被中断,遵循边界事件。
业务场景:适用于限时的业务流程。
配置的流程文件主要内容为:
测试过程为创建两个流程实例来进行比较,实例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] 与测试前想的一样。