Camunda Spring Boot如何按流程类型触发对应EventListener
分流程类型触发对应专属事件监听器的实现方案
不需要专门在创建流程定义时额外传入类型判定信息,流程引擎触发事件时,上下文本身就会携带当前所属流程定义的固有标识,直接基于这些标识做过滤即可,常用实现方式有两种:
监听器配置触发条件(无侵入,优先选)
建模两类流程时,本来就会给每个流程定义设置全局唯一的流程Key(比如Invoicing流程固定设为invoicing_main,Task流程固定设为task_main),这个Key是流程定义的基础属性,不需要额外新增自定义字段。
只需要给每个监听器配上对应的触发条件即可:- 已有的
onExecutionEvent、onTaskEvent监听器,加条件:仅当事件上下文的流程定义Key匹配Invoicing流程的Key时,才执行业务逻辑 - 新增的Task流程专属监听器,加条件:仅当上下文流程定义Key匹配Task流程的Key时触发
不同流程引擎的条件配置语法略有差异,核心判断逻辑参考:
// 条件表达式核心逻辑 currentProcessDefinitionKey == 'invoicing_main' // 给Invoicing专属监听器配置 currentProcessDefinitionKey == 'task_main' // 给Task专属监听器配置- 已有的
监听器内部做前置拦截(适合集中维护逻辑的场景)
如果不想单独给每个监听器配条件,也可以在每个监听器的业务逻辑最开头加一层判断,不属于当前监听器处理范围的流程直接终止执行即可,示例:// 以Java生态常用流程引擎的任务监听器为例 @Override public void notify(DelegateTask delegateTask) { // 先获取当前流程的定义Key String processKey = delegateTask.getProcessDefinitionKey(); // 非Invoicing流程直接跳过,不执行后续逻辑 if (!"invoicing_main".equals(processKey)) { return; } // 后续编写Invoicing流程专属的业务处理逻辑 }
如果你本身有统一管理业务类型标签的需求,也可以在流程定义里扩展自定义属性存流程类型标识,判断逻辑和用流程Key完全一致,但这属于可选优化,不是必须操作。只要是事件上下文能拿到的、可以唯一区分两类流程的属性,都能作为判定依据,不需要在创建流程实例的时候额外传参。
内容的提问来源于stack exchange,提问作者Tushar Agarwal
相关产品推荐
相关产品推荐

