当前位置: 首页 > news >正文

flowable的监听器顺序

监听器

flowable的监听器分两种:

  • 执行监听器:3种,start,take,end
  • 任务监听器:4种,assignment,create,complete,delete

对于执行监听器:

  • 节点只会触发两种:start,end
  • 连线会触发三种:start,take,end

测试

如图,一个工作流上有X、Y、Z三个节点,节点X经判断条件流向节点Y。现在:

  • 节点X-判断的连线:添加3种事件监听器:start、take、end,每种事件监听器各2个。
  • 判断-节点Y的连线:添加3种事件监听器:start、take、end,每种事件监听器各2个。
  • 节点Y:
    • 添加2种事件监听器:startA、startB
    • 添加4种任务监听器:assignment、create、complete、delete,其中create和complete各2个。

同类监听器的添加顺序与数字顺序相同,例如create1先添加,create2后添加。
运行流程,得到运行的先后顺序:

  • 节点X-判断的连线:
    • start1-1
    • start1-2
    • take1-1
    • take1-2
    • end1-1
    • end1-2
  • 判断-节点Y的连线:
    • start2-1
    • start2-2
    • take2-1
    • take2-2
    • end2-1
    • end2-2
  • 节点Y:
    • start
    • assignment
    • create1
    • create2
    • complete1
    • complete2
    • delete
    • end

当X节点完成,此时流程流向Y节点,但Y节点尚未审批,那么这个过程会依次触发:

  • 节点X-判断的连线:start、take、end
  • 判断-节点Y的连线:start、take、end
  • 节点Y:start、assignment、create1、create2

当Y节点审批完成,那么会依次触发:

  • 节点Y:complete1、complete2、delete、end

结论

根据测试,可得出以下结论:

  • 节点和连线的监听器是按其流程顺序触发的,前面的节点/连线的所有监听器完成,后面的节点/连线的监听器才会触发。
  • 每段连线都是独立的,会按先后顺序触发监听器。
  • 对于一个节点,其监听器的触发顺序是:
    • 执行监听器start
    • 任务监听器assignment,create
    • (用户审批操作)
    • 任务监听器complete,delete
    • 执行监听器end
  • 任务监听器assignment 是在 任务监听器create之前触发的。
  • 审批完成会删除Task,因此正常流程下delete是会触发的。
  • 任务监听器的delete在执行监听器的end之前触发,因此在执行监听器end中是无法通过上下文变量(参数)获取Task对象的。

节点的监听器执行顺序如下:

注意

若要在同一个节点下添加多个相同事件,例如添加complete1、complete2,虽然这些事件会按添加顺序触发,但需要考虑事件内部是否有异步操作。若是,则无法确保异步操作也是按顺序执行的。
由于create和complete中间有一步用户审批的人工操作,因此先触发的放到事件create中,后触发的放到事件complete中通常能保证执行顺序。
如果明确异步操作耗时不高,也可以将先触发的放到事件complete中,后触发的放到事件end中。

http://www.dtcms.com/a/398091.html

相关文章:

  • 连接局域网、主干网和虚拟局域网
  • 【保姆级】| 基于Docker的dify部署流程
  • 网站建设 策划方案如何用flashfxp通过ftp访问网站服务器下载网站代码
  • 大规模无人机检测数据集:11998张高质量图像,支持YOLOv8、COCO、TensorFlow多格式训练,涵盖飞机、无人机、直升机三大目标类别
  • 软考-系统规划与管理师教程(第2版)- 2025 新增 / 改版重点
  • sparkml 多列共享labelEncoder
  • 【TS5】Electron与Flutter
  • 线程池高频面试题(核心原理+配置实践+常见误区)
  • 【LeetCode热题100(28/100)】两数相加
  • 网站搭建思路如何使用模板建设网站
  • 注册网站的步骤二手房出售
  • 新疆燃气从业人员考试真题练习
  • 知识图谱的表示与推理对自然语言处理中因果性语义逻辑的影响与启示研究
  • go go-zero的学习,持续中...
  • C++篇 类和对象(3)万能工具怎么用?
  • 跨端边云时序数据管理新范式:Apache IoTDB 的 DB+AI 融合之道
  • 线程同步与互斥和生产消费模型
  • Java怎么终止一个线程
  • 软件项目管理中, UT测试如何体现
  • 神经网络工具箱
  • 软考系统架构设计师知识点-软件系统质量属性
  • 西安网站建设的软件哪个免费的网页制作软件最好
  • 【安装配置】【搭建本地Maven私服】
  • 一维卡尔曼滤波(无过程噪声)详解
  • AUTOSAR---汽车软件架构的标准化与未来展望
  • 压阻式应变传感器
  • Pydantic库应用
  • 【Linux手册】多线程编程的关键支撑:线程池与线程安全
  • 数字孪生:技术应用与实践案例
  • 阿里云上CentOS6.9(停止维护)导致的yum下载chrony失败如何解决?