type
status
date
slug
summary
tags
category
icon
password
flowable中会对流程定义做缓存处理,在实现自由流程的时候需要动态给流程定义添加节点,默认的是对流程定义做的缓存,要想在每个流程实例中动态添加节点,可以通过修改流程缓存,添加每个流程实例的缓存 ## 涉及到的类
## 主要步骤
- 步骤1:修改BpmnJsonConverter,添加自定义属性,区分流程是否为自由流程
- 步骤2:设置全局的FlowableEventListener( FlowableEngineEventType. ACTIVITY_COMPLETED ),在流程启动的时候判断流程是否为自由流程,如果是的话,把流程的bpmnModel转成xml设置到自己定义的缓存对象中,然后保存到redis里。 Redis采用了Hash方式存储,key为流程实例ID,value为自定义缓存类。
- 步骤3:自由流程添加节点的时候提前把流程实例id放在request作用域中
- 步骤4:定义 DefaultDeploymentCache 子类重写get方法,如果是自定义流程并且request作用域中有流程实例id就中redis中获取流程定义json转换成 ProcessDefinitionCacheEntry
- 步骤5:定义自由流程命令类,获取流程定义缓存,给里面添加连线和节点
- 步骤6:往新加的节点上跳转 ## 放入缓存主要代码 if (FlowUtils.isFreeProcess(entity.getProcessDefinitionId())) {
下方为以上用到的类以及方法
- 获取缓存命令类
- 序列化缓存对象方法
- Redis存储的对象
- 添加到redis接口
- 添加到redis接口实现
修改流程配置类添加自定义缓存获取
设置的自定义缓存获取类(主要是重写获取缓存的get方法,以下仅为参考)
定义获取缓存命令类
添加节点命令类
调用方法示例
FlowUtils
实现效果
- 作者:OldCamel
- 链接:https://blog.oldcamel.cc/article/5
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。