一、流程变量的配置与获取
1 比如在一个监听器里面配置了固定参数,需要在监听器执行的去获取他,如何获取呢?
二、执行监听器与监听器的区别
一句话记忆
ExecutionListener 面向“流程走向” —— 流程从哪来到哪去。
TaskListener 面向“用户任务” —— 任务创建、分配、完成、删除。
给帅气的你的建议,都用执行监听器,可配置的节点类型多,生命周期更长,并且更加灵活!!!
三、监听器如何写业务方法
和一般的controller一样,注入你的接口,然后写方法调用就行了,但是!!!
你的方法都需要写在异步方法里面去触发,也是为什么flowable 支持async这种异步方法。
原因是因为,本身执行监听器,在flowable里面就是走了事务了,很可能你执行的业务方法的数据和flowable本身的数据库不是同一个数据库,所以需要异步的方法,通过新的线程去调用执行你的业务方法!
四、监听器里面业务方法涉及跨数据库如何处理
1、异步开启一个方法:
2 、调用的本身就是异步方法
如果你想再优雅一点
用 Spring 的
@Async
代替AsyncManager.me().execute(...)
;或者把逻辑封装成 Flowable 的
ServiceTask
,加async=true
,让 Flowable 的异步引擎来调度
3、我们的老朋友CompletableFuture
五、监听器的扩展问题
我们在使用监听器的过程中,发现了:因为针对不同的业务肯定需要配置不同的流程,那么针对不同流程配置的时候,其实监听器的名字和流程变量,需要每次都去查询,配置其实给了系统管理员很大的阻碍,本身开发人员写了新的代码,系统管理员还需要额外配置。一般是通过设计模式进行处理。
比如每次审批完成需要抄送给指定的人。
我完全可以只需要配置一个公共发消息的监听器即可。然后由这个这个监听器,触发器各自业务的监听器来实现。