activiti事件
Activiti 事件与监听器详解
事件类型概述
Activiti 提供了丰富的事件机制,这些事件贯穿于整个工作流的生命周期。主要分为两大类:执行事件(Execution Events)和任务事件(Task Events)[^1]。
执行事件:这类事件发生在流程实例及其子流程的各个阶段,例如启动、结束以及活动之间的转换等时刻。
任务事件:当用户任务经历创建、指派、完成等一系列变化时会触发此类事件[^4]。
监听器实现方式
执行监听器 (Execution Listener)
执行监听器能够捕捉到更广泛的流程进展状态更新,并允许开发者针对特定条件编写响应代码。可以通过XML配置文件或Java API的方式指定要监控的具体环节并关联相应的处理器方法[^3]:
<executionListener event="start" class="com.example.StartProcessListener"/>
上述例子展示了如何为start
类型的执行事件注册一个名为StartProcessListener
的监听组件。
对于采用编程手段构建的应用程序而言,则可通过如下形式添加监听功能:
builder.executionListener("start", new DelegateExpression() {
@Override
public Object getValue(DelegateExecution execution) throws Exception {
return new StartProcessListener();
}
});
任务监听器 (Task Listener)
相比之下,任务监听器更加专注于单个作业项的状态变迁管理。同样支持基于声明式定义或是编码接口的形式集成至项目之中:
<taskListener event="create" class="com.example.TaskCreateListener"/>
而在纯代码环境下,可利用Builder模式轻松达成相同效果:
builder.taskListener("create", new TaskListener() {
@Override
public void notify(DelegateTask delegateTask) {
// 自定义逻辑...
}
});
除了以上提到的传统做法之外,Activiti 还引入了一种更为通用且强大的工具——全局事件监听器(Global Event Listeners),它能够在不依赖具体业务模型的前提下捕获任何地方发生的全部种类的通知消息。
示例应用场景
假设存在这样一个需求场景:每当新发起一笔请假申请时自动向部门经理发送提醒通知;而一旦该请求得到审批通过之后还要同步记录下此次操作的时间戳作为绩效考核依据之一。此时就可以借助前面介绍过的特性组合起来解决问题。
public class LeaveApplicationCreatedListener implements ExecutionListener {
private static final Logger logger = LoggerFactory.getLogger(LeaveApplicationCreatedListener.class);
@Override
public void notify(DelegateExecution execution) {
String managerEmail = (String) execution.getVariable("managerEmail");
try {
sendNotificationToManager(managerEmail);
logger.info("Successfully notified the manager.");
} catch (Exception e) {
logger.error("Failed to notify the manager.", e);
}
// 记录时间戳
execution.setVariable("applicationTimestamp", LocalDateTime.now());
}
private void sendNotificationToManager(String email){
// 发送邮件逻辑省略..
}
}
此案例中不仅实现了基本的消息推送服务,同时也完成了额外的数据持久化任务,充分体现了灵活性优势所在。
相关推荐

















