Flowable 有3种监听器,相关内容在开发文档中有详细的说明:
- 事件监听器(Flowable 开发文档 3.18)
- 执行监听器(Flowable 开发文档 8.5.13)
- 任务监听器(Flowable 开发文档 8.5.14)
分别实现下面的接口,重写相应的方法可以实现监听。
// 事件监听器接口,可全局监听整个流程
org.flowable.common.engine.api.delegate.event.FlowableEventListener;
// 执行监听器,可监听每一个组件,整个流程也可以配置
org.flowable.engine.delegate.ExecutionListener;
// 任务监听器,主要用来监听节点
org.flowable.engine.delegate.TaskListener;
实现了相应的监听器后,还要在流程设计器中与流程配置绑定才能生效。
事件监听器
可实现流程的全局监听,监听的粒度比较细。支持的监听事件列表可参考开发文档3.18.6。
找到资料24. flowable 全局监听,继承下面的接口,再重写与事件对应的方法。感觉这种方式要好用一些。
org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener;
另外,开发文档 3.18.3 里面有说明,利用 RuntimeService
就可以在运行时添加监听器。
接口实现
实现FlowableEventListener
@Component
public class WorkFlowListener implements FlowableEventListener {
@Override
public void onEvent(FlowableEvent event) {
System.out.println("全局监听:WorkFlowListener");
}
@Override
public boolean isFailOnException() {
return false;
}
@Override
public boolean isFireOnTransactionLifecycleEvent() {
return false;
}
@Override
public String getOnTransaction() {
return null;
}
}
实现 AbstractFlowableEngineEventListener
@Component
public class WorkFlowListener1 extends AbstractFlowableEngineEventListener {
@Override
protected void taskCreated(FlowableEngineEntityEvent event) {
System.out.println("全局监听:WorkFlowListener1-任务创建");
}
@Override
protected void variableCreated(FlowableVariableEvent event) {
System.out.println("全局监听:WorkFlowListener1-创建变量");
}
@Override
protected void processCreated(FlowableEngineEntityEvent event) {
System.out.println("全局监听:WorkFlowListener1-创建流程");
}
@Override
protected void processStarted(FlowableProcessStartedEvent event) {
System.out.println("全局监听:WorkFlowListener1-开始流程");
}
@Override
protected void taskAssigned(FlowableEngineEntityEvent event) {
System.out.println("全局监听:任务分配");
}
}
执行监听器
支持流程级别监听。
可监听的事件
- 流程实例的启动和结束。
- 流程执行转移。
- 活动的启动和结束。
- 网关的启动和结束。
- 中间事件的启动和结束。
- 启动事件的结束,和结束事件的启动。
具体选项
start 开始
take 启用
end 结束
在转移上只会触发take
事件。当监听器定义在转移上时,event
属性的值将被忽略。
接口实现
@Component
public class TestExecutionListener implements ExecutionListener {
@Override
public void notify(DelegateExecution execution) {
System.out.println("执行监听器:" + execution.getEventName());
}
}
任务监听器
只能监听用户任务;如果监听器不存在是会报错的。
可监听的事件
create 任务已经创建
assignment 已经分配办理人
complete 任务已经完成
delete 任务即将被删除
执行的顺序 :
assignment 分配办理人 → create 创建 → complete 完成 → delete 删除
文档中相关解释
请注意:当流程执行到达用户任务时,在触发create事件之前,会首先触发assignment事件。这顺序看起来不太自然,但是有实际原因的:当收到create事件时,我们通常希望能看到任务的所有参数,包括办理人。
接口实现
@Component
public class UserTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
System.out.println("节点监听:" + delegateTask.getEventName());
}
}