FLOWABLE高级技术的应用与踩坑

zxbandzby
4
2025-07-17

一、流程变量的配置与获取

1 比如在一个监听器里面配置了固定参数,需要在监听器执行的去获取他,如何获取呢?

二、执行监听器与监听器的区别

一句话记忆

  • ExecutionListener 面向“流程走向” —— 流程从哪来到哪去。

  • TaskListener 面向“用户任务” —— 任务创建、分配、完成、删除。

  • 给帅气的你的建议,都用执行监听器,可配置的节点类型多,生命周期更长,并且更加灵活!!!

三、监听器如何写业务方法

和一般的controller一样,注入你的接口,然后写方法调用就行了,但是!!!

你的方法都需要写在异步方法里面去触发,也是为什么flowable 支持async这种异步方法。

原因是因为,本身执行监听器,在flowable里面就是走了事务了,很可能你执行的业务方法的数据和flowable本身的数据库不是同一个数据库,所以需要异步的方法,通过新的线程去调用执行你的业务方法!

四、监听器里面业务方法涉及跨数据库如何处理

1、异步开启一个方法:

2 、调用的本身就是异步方法

如果你想再优雅一点

  • 用 Spring 的 @Async 代替 AsyncManager.me().execute(...)

  • 或者把逻辑封装成 Flowable 的 ServiceTask,加 async=true,让 Flowable 的异步引擎来调度

3、我们的老朋友CompletableFuture

五、监听器的扩展问题

我们在使用监听器的过程中,发现了:因为针对不同的业务肯定需要配置不同的流程,那么针对不同流程配置的时候,其实监听器的名字和流程变量,需要每次都去查询,配置其实给了系统管理员很大的阻碍,本身开发人员写了新的代码,系统管理员还需要额外配置。一般是通过设计模式进行处理。

比如每次审批完成需要抄送给指定的人。

我完全可以只需要配置一个公共发消息的监听器即可。然后由这个这个监听器,触发器各自业务的监听器来实现。

动物装饰