Flowable执行监听器

3,828 阅读2分钟

「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」。

介绍

Flowable有两种监听器:执行监听器、任务监听器,这篇文章主要介绍关于执行监听器的使用,任务监听器的使用可以参考这篇文章: Flowable 任务监听器实践使用

任务监听器

  • 任务监听器(task listener)用于在特定的任务相关事件发生时,执行自定义的Java逻辑或表达式。
  • 注意:任务监听器只能在流程定义中作为用户任务的子元素
  • 举例使用:比如你想要在节点:部门经理 审批结束时,通知下总经理你的审批意见,可以用任务监听器

执行监听器

  • 执行监听器(execution listener)可以在流程执行中发生特定的事件时,执行外部Java代码或计算表达式
  • 可以被捕获的事件有
    • 流程实例的启动和结束。
    • 流程执行转移。
    • 活动的启动和结束。
    • 网关的启动和结束。
    • 中间事件的启动和结束。
    • 启动事件的结束,和结束事件的启动。
  • 举例使用:在整个流程审批结束时,执行某个业务逻辑时,可以使用,比如请假单审批结束的时候,通知下请假人审批结果

区别

任务监听器和执行监听器的区别,主要是使用位置的区别,只有用户任务节点才能用任务监听器,当你发现你要做监听器的节点不能用任务监听器实现时,就可以用任务监听器

实践

需求举例

想要在整个流程审批结束的时候,执行某个业务逻辑

配置实现

(1)在流程的结束节点配置执行监听器,如下图 image.png

(2)这里事件选择为end,然后填写委托表达式,指明是哪个执行监听器实现。(注意这个委托表达式要跟代码一致image.png 执行监听器的事件有三种:这里根据需求选择了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 实现你的业务逻辑
    }
}

参考

tkjohn.github.io/flowable-us…