深入探究Camunda监听器

简介: 执行监听器与任务监听器

前言

本篇不仅仅是讲解监听器功能,也是对上一篇深入探究Camunda加签问题使用执行监听器加签时为什么要在连线上设置的解答。

首先监听器分为ExecutionListener【执行监听器】和TaskListener【任务监听器】,我们知道不管是连线还是任务节点底层都有对应的执行器,所以ExecutionListener是可以设置在连线和节点上的。

接着我们说一下哪些场景下可以使用监听器去完成:

  • 动态分配节点处理人
  • 流程运行到某个节点时通知待办人
  • 统计任务处理时间
  • 处理业务逻辑

执行监听器

执行监听器的触发事件有:start、end、take;其中节点有start、end两种事件,而连线则有take事件。

给或签节点设置了开始事件和结束事件的执行监听器

开启一条流程实例测试一下,这里我们在发起流程时就把所有节点审批人参数设置好。

发起人节点调用审批通过后就触发或签节点的执行监听器开始事件,两次是因为该监听事件是设置在节点上的,而或签节点设置了两个处理人,所以它会创建两个待办任务,每个待办任务都有对应的执行器,等到或签节点有人审批通过了,就会触发执行监听器结束事件。

接下来我们改变一下设置审批人的方式,通过任务节点上的执行监听器去设置,【其实这里不需要测试的,想想就知道不行,为了能表达地更清晰吧】

@ComponentpublicclassCustomExecutionListenerimplementsExecutionListener {
@Overridepublicvoidnotify(DelegateExecutiondelegateExecution) throwsException {
System.out.println("ExecutionListener--事件:【"+delegateExecution.getEventName()+"】--触发了");
if ("start".equals(delegateExecution.getEventName())){
List<String>userOneList=newArrayList<>();
userOneList.add("zhangsan");
userOneList.add("lisi");
delegateExecution.setVariable("userOneList",userOneList);
        }
    }
}

当发起人节点审批后,会报错

说明在触发该监听器之前,流程引擎就需要知道该节点上有几个待办任务从而创建对应数量的执行器。这也是上一篇动态设置审批人时在节点前连线上设置执行监听器的原因。

当前你可以选择在节点上的执行监听器结束事件触发时去设置下一节点审批人,不过我感觉麻烦一点。

任务监听器

任务监听器的触发事件有:create, assignment, update, complete, delete or timeout。

这里我们演示常用的create、assignment、complete事件

重新部署后,把审批人设置方式再改回到发起流程时设置,然后发起流程实例,这里如果执行监听器的触发在任务监听器之前,那就更不能在任务监听器上动态设置审批人了。

先看红框标记部分,当任务监听器的完成事件触发后才会触发节点上执行监听器的结束事件,然后触发下一个节点的执行监听器开始事件,接着就是创建任务和分配任务时触发任务监听器。

绿框标记部分说明待办任务调用审批通过接口后会触发任务监听器的完成事件,如果满足了该节点完成条件,就会连续触发的待办任务对应的执行监听器结束事件。

所以动态设置审批人的条件就是要在节点执行监听器的开始事件触发之前就设置好审批人参数。

总结

附图一张,撒花完结。


相关文章
|
7月前
|
存储 安全 Java
事件的力量:探索Spring框架中的事件处理机制
事件的力量:探索Spring框架中的事件处理机制
75 0
|
3月前
|
设计模式 人工智能 安全
【Tomcat源码分析】生命周期机制 Lifecycle
Tomcat内部通过各种组件协同工作,构建了一个复杂的Web服务器架构。其中,`Lifecycle`机制作为核心,管理组件从创建到销毁的整个生命周期。本文详细解析了Lifecycle的工作原理及其方法,如初始化、启动、停止和销毁等关键步骤,并展示了LifecycleBase类如何通过状态机和模板模式实现这一过程。通过深入理解Lifecycle,我们可以更好地掌握组件生命周期管理,提升系统设计能力。欢迎关注【码上遇见你】获取更多信息,或搜索【AI贝塔】体验免费的Chat GPT。希望本章内容对你有所帮助。
|
7月前
|
存储 安全 Java
全面探索Spring框架中的事件处理机制
在现代应用程序中,各个组件之间的通信是至关重要的。想象一下,你的应用程序中的各个模块像是一个巨大的交响乐团,每个模块都是一位音乐家,而Spring事件机制就像是指挥家,将所有音乐家协调得天衣无缝。这种松耦合的通信方式使你的应用程序更加灵活、可维护,而且能够轻松应对变化。现在,让我们进入这个令人兴奋的音乐厅,探索Spring事件的世界。
|
设计模式 缓存 Java
Spring监听器用法与原理详解(带ApplicationListener模型图)(1)
Spring监听器用法与原理详解(带ApplicationListener模型图)
940 0
|
设计模式 Java 数据库连接
Spring高手之路7——事件机制与监听器的全面探索
本篇文章为你详细解析了Spring的事件机制,包括了Spring事件模型的四个核心概念:事件源、事件、广播器、监听器。我们通过深入浅出的实例解析了如何自定义事件和监听器,以及如何在实际项目中应用。最后,我们还详细探讨了监听器和Bean的生命周期的关系。无论你是Spring初学者,还是有一定经验的开发者,阅读本文都将帮助你更深入地理解Spring的事件机制和监听器,掌握Spring框架的核心技术。
1132 0
Spring高手之路7——事件机制与监听器的全面探索
|
设计模式 缓存 Java
Spring监听器用法与原理详解(带ApplicationListener模型图)(2)
Spring监听器用法与原理详解(带ApplicationListener模型图)
255 0
JavaWeb第十三章课后题 监听器Listener详解
JavaWeb第十三章课后题 监听器Listener详解
90 0
|
XML API Android开发
Preference组件探究之源码解读
Preference组件探究之源码解读
|
设计模式 消息中间件 Java
从观察者模式谈论 : Spring Boot中创建、发布和侦听自定义事件
从观察者模式谈论 : Spring Boot中创建、发布和侦听自定义事件
494 0
从观察者模式谈论 : Spring Boot中创建、发布和侦听自定义事件
|
监控 Java 应用服务中间件
监听器第一篇【基本概念、Servlet各个监听器】
监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。。
291 0
监听器第一篇【基本概念、Servlet各个监听器】