「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」。
介绍
Flowable有两种监听器:执行监听器、任务监听器,这篇文章主要介绍关于执行监听器的使用,任务监听器的使用可以参考这篇文章: Flowable 任务监听器实践使用
任务监听器
- 任务监听器(task listener)用于在特定的任务相关事件发生时,执行自定义的Java逻辑或表达式。
- 注意:任务监听器只能在流程定义中作为用户任务的子元素
- 举例使用:比如你想要在节点:部门经理 审批结束时,通知下总经理你的审批意见,可以用任务监听器
执行监听器
- 执行监听器(execution listener)可以在流程执行中发生特定的事件时,执行外部Java代码或计算表达式
- 可以被捕获的事件有:
- 流程实例的启动和结束。
- 流程执行转移。
- 活动的启动和结束。
- 网关的启动和结束。
- 中间事件的启动和结束。
- 启动事件的结束,和结束事件的启动。
- 举例使用:在整个流程审批结束时,执行某个业务逻辑时,可以使用,比如请假单审批结束的时候,通知下请假人审批结果
区别
任务监听器和执行监听器的区别,主要是使用位置的区别,只有用户任务节点才能用任务监听器,当你发现你要做监听器的节点不能用任务监听器实现时,就可以用任务监听器
实践
需求举例
想要在整个流程审批结束的时候,执行某个业务逻辑
配置实现
(1)在流程的结束节点配置执行监听器,如下图
(2)这里事件选择为end,然后填写委托表达式,指明是哪个执行监听器实现。(注意这个委托表达式要跟代码一致)
执行监听器的事件有三种:这里根据需求选择了end
- start:开始
- end:结束
- take:执行
代码实现
核心:执行监听器要实现ExecutionListener,然后标注上注解@Component,注解内容就是你在上面步骤配置委托表达式时哪个,然后在notify方法内部写你的业务逻辑。
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.springframework.stereotype.Component;
/**
* @author 勤任风
* @date 2022-02-11
* 执行监听器-监听整个流程结束时的时刻
*/
@Slf4j
@Component(value = "ReceiptExecutionListener")
public class ReceiptExecutionListener implements ExecutionListener {
@Override
public void notify(DelegateExecution execution) {
execution.getProcessInstanceId();//获取流程实例id
//TODO 实现你的业务逻辑
}
}