【Flowable】监听器
Flowable 监听器
Flowable 有3种监听器,相关内容在开发文档中有详细的说明:
- 事件监听器(Flowable 开发文档 3.18)
- 执行监听器(Flowable 开发文档 8.5.13)
- 任务监听器(Flowable 开发文档 8.5.14)
找到的资料一般只提到后2种,事件监听器可能会分开说明。
分别实现下面的接口,重写相应的方法可以实现监听。
// 事件监听器接口,可全局监听整个流程 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("全局监听:任务分配"); } }
配置
模型设计器中,不选中任何组件,可在流程级别配置事件监听器、执行监听器。
添加事件监听器需要先选择监听的事件类型。
- 类:写全限定类名;
- 代理表达式:写注入到 Spring 中 Bean 名称,如:
${testEventListener}
; - 实体类型:可用值 见 文档 3.18.6。所有的
ENTITY_\*
事件都与实体关联。
类、表达式写其中一个就可以了,实体类型也只有监听 ENTITY_
开头的事件时需要填写,还未实测过。文档大概是建议写类名,写类名每次都是实例化新的实例。而使用代理表达式的话,Spring 中一般都是用的单例模式,可能存在线程安全问题。相关内容在 8.5.3 Java 服务任务-字段注入与线程安全 中有描述。
配置多个监听器
配置抛出事件
可配置的抛出事件,还未实测。
执行监听器
支持流程级别监听。
可监听的事件
- 流程实例的启动和结束。
- 流程执行转移。
- 活动的启动和结束。
- 网关的启动和结束。
- 中间事件的启动和结束。
- 启动事件的结束,和结束事件的启动。
具体选项
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()); } }
配置
配置可参考事件监听器。还可配置表达式及字段注入,还未实测。文档中有相关说明。
本文作者:JamKing
本文链接:https://www.cnblogs.com/JamKing/p/16731831.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具