BPMN 边界事件详解
边界事件是捕获事件,触发后当前流程会被终止,转而执行触发后的流程。常见的边界事件类型包括:
- 定时器边界事件
- 错误边界事件
- 信号边界事件
- 补偿边界事件
本文重点讲解前三种类型的配置与测试方法。掌握边界事件需明确两点:何时触发以及触发后的后果。
一、定时器边界事件
定时器边界事件用于监控任务执行时间。若任务在规定时间内未完成,则触发边界事件。例如,设置初级工程师节点超时时间为 1 分钟,若超时未处理,则流转至中级工程师节点。
1. BPMN 配置
在 BPMN 文件中设置 <timeDuration>PT1M</timeDuration>。
2. 测试代码
需确保 activiti.cfg.xml 中定时器事件配置为异步。以下是 Java 测试示例:
public static void timerBoundaryEventTest() {
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
RepositoryService rs = engine.getRepositoryService();
RuntimeService runService = engine.getRuntimeService();
TaskService taskService = engine.getTaskService();
Deployment dep = rs.createDeployment().addClasspathResource("timer-boundary-event-test.bpmn").deploy();
ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();
ProcessInstance pi = runService.startProcessInstanceById(pd.getId());
Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
System.out.println("当前任务是:" + task.getName());
try {
Thread.sleep( * );
} (InterruptedException e) {
e.printStackTrace();
}
task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
System.out.println( + task.getName());
}

