Flowable 任务监听器与执行监听器的介绍

简介: Flowable 任务监听器与执行监听器的介绍

更多ruoyi-nbcio功能请看演示系统

gitee源代码地址

前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio

演示地址:RuoYi-Nbcio后台管理系统

更多nbcio-boot功能请看演示系统

gitee源代码地址

后端代码: https://gitee.com/nbacheng/nbcio-boot

前端代码:https://gitee.com/nbacheng/nbcio-vue.git

在线演示(包括H5) : http://218.75.87.38:9888

1、前言

       在流程设计当中,有时候我们需要流程启动前、中、后去触发一些事件,执行监听器与任务监听器在生产中经常会用在几个方面:

        1.1 动态分配节点处理人。通过前一个节点设置的变量,在运行到下一个节点时设置对应的处理人;

        1.2 当流程运行到某个节点时,发送邮件或短信给待办用户;

        1.3 统计流程处理时长,是否超时等;

        1.4 费用流程结束后需要将金额回写到SAP系统

        1.5业务层面数据处理

     所以在业务需求驱动下,我们需要对Flowable的事件监听器了解研究。

     本文主要针对Flowable 的 ExecutionListener 和 TaskListener 如何使用进行探讨。

2、ExecutionListener 和 TaskListener 区别

     ExecutionListener 和 TaskListener 都是 Flowable 提供的事件监听器,但它们的作用和用途有些不同。

2.1 ExecutionListener

      ExecutionListener 是针对整个流程实例的事件监听器,它可以监听流程实例启动、结束、活动开始、活动结束、连线选择等事件。ExecutionListener 的事件类型和执行时机都是固定的,它不能直接访问任务相关的信息(例如任务的候选人、任务的执行者等),因此通常用于处理与流程实例相关的事件。

执行监听器则监听流程的所有节点和连线。主要有start、end、take事件。其中节点有start、end两种事件,而连线则有take事件。下图是执行监听器的生命周期:

2.2 TaskListener

      TaskListener 顾名思义它是针对任务的事件监听器,它可以监听任务的创建、分配、完成等事件。TaskListener 的事件类型和执行时机是与任务相关的,它可以访问任务相关的信息,并可以对任务进行操作(例如设置任务的执行人、指定任务的代理人等),因此通常用于处理与任务相关的事件。

       任务监听器的生命周期如下图所示,会经历assignment、create、complete、delete。当流程引擎触发这四种事件类型时,对应的任务监听器会捕获其事件类型,再按照监听器的处理逻辑进行处理。

3、▼ TaskListener 如何使用 ▼

事件触发状态有流程:

create(创建):在任务被创建且所有的任务属性设置完成后才触发

assignment(指派):在任务被分配给某个办理人之后触发

complete(完成):在配置了监听器的上一个任务完成时触发

delete(删除):在任务即将被删除前触发。请注意任务由completeTask正常完成时也会触发

事件类型:

类 (示例:com.nbcio.demo.listener.FlowExecutionListener)

表达式

委托表达式

事件类型的值:

类 对应类的全路径

表达式 使用的是Spring EL表达式

事件类型使用'类'

创建一个类FlowTaskListener

@Slf4j
@Component
public class FlowTaskListener implements TaskListener {
 
    @Override
    public void notify(DelegateTask delegateTask) {
        log.info("任务监听器:{}", delegateTask);
    }
 
}

事件类型使用'表达式'

<extensionElements> 
    <flowable:taskListener expression="${testExpress.test()}" event="create" /> 
</extensionElements>

Flowable 的表达式语法类似Spring EL, ${testExpress.test()} testExpress代表对象名,因为@Component生成的对象名默认以类名称命名,testExpress.test() 代表调用testExpress的test()方法

@Slf4j
@Component
public class TestExpress {
 
    public void test() {
        log.info("TestExpress被调用了");
    }
 
}

4、ExecutionListener 如何使用 ▼

事件触发状态有流程:启动(start)、结束(end)、在用(take)

事件类型:

类(示例:com.nbcio.demo.listener.FlowExecutionListener)

表达式

委托表达式

事件类型的值:

类 对应类的全路径

表达式 使用的是Spring EL表达式

事件参数:可以配置参数传递到事件中

事件类型使用'类'

创建一个类FlowExecutionListener

 

@Slf4j
@Component
public class FlowExecutionListener implements ExecutionListener {
 
    @Override
    public void notify(DelegateExecution execution) {
        log.info("执行监听器:{}", execution);
    }
 
}

事件类型使用'表达式'

和上文的FlowTaskListener类似,我就不重复了

事件类型使用'委托表达式'

也是和上文的FlowTaskListener类似,偷懒了

5、总结

    看完本文,会发现 Flowable 监听器使用其实并不难,而且可以很灵活地扩展我们的业务

相关文章
|
Java
25JavaWeb基础 - 监听器
25JavaWeb基础 - 监听器
64 1
|
消息中间件 NoSQL Java
SpringDataRedis 中定义消息的监听器| 学习笔记
快速学习 SpringDataRedis 中定义消息的监听器。
SpringDataRedis 中定义消息的监听器| 学习笔记
|
7月前
|
Java 容器
SpringBoot3 事件和监听器
SpringBoot3 事件和监听器
|
7月前
javaWeb监听器Listener -自定义监听器类实现
javaWeb监听器Listener -自定义监听器类实现
Listener 监听器
监听器是专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。Servlet监听器:Servlet规范中定义的一种特殊类,它用于监听Web应用程序中的ServletContext,HttpSession和HttpServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。
|
缓存 应用服务中间件 数据库
【JavaWeb】 三大组件之监听器 Listener
在JavaWeb应用程序中,Listener(监听器)是一种机制,用于监听和响应特定的事件。它可以感知并响应与应用程序相关的事件,从而执行相应的逻辑处理。事件是在应用程序运行过程中发生的特定动作或状态改变。例如,Web应用程序的启动和关闭、请求的到达和完成、会话的创建和销毁等都被认为是事件。监听器会注册对这些事件的感兴趣,并在事件发生时调用相应的回调方法来执行预定的业务逻辑。
|
XML 监控 Java
Listener 监听器介绍以及代码演示
Listener 监听器介绍以及代码演示
118 0
|
程序员
监听器
监听器
116 0
|
设计模式 安全 Java
监听器和过滤器
监听器和过滤器
132 0
监听器和过滤器
|
Java Spring
监听器 - 基础篇
监听器 - 基础篇
202 0
监听器 - 基础篇