2022-09-26 17:52阅读: 12849评论: 0推荐: 0

【Flowable】监听器

Flowable 监听器

Flowable 有3种监听器,相关内容在开发文档中有详细的说明:

找到的资料一般只提到后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 中国大陆许可协议进行许可。

posted @   JamKing  阅读(12849)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.