Flowable6.8框架中流程变量的存储【serializable类型】

1.流程启动参数

我们在流程启动的时候一般采用两种启动方式

startProcessInstanceByKey(String key,Map map);根据流程部署key启动
startProcessInstanceById(String Id,Map map);根据流程部署Id启动

两个方式都有使用,(一般我会在定时任务中使用ByKey来启动流程)

二者的作用都是启动流程,只是一个根据id一个根据key来启动。不过两个方法的第二个参数都是map集合。这个map集合的作用非常大,以至于我们流程中每一个步骤都要使用到它。

2.启动后的map会存储到什么地方?

使用上述的方法启动后,变量会被流程引擎框架自动存储。首先存储到 act_ru_variable 表中

我们需要注意的是该表的几个字段:TYPE_ 、NAME_ 、PROC_INST_ID

TYPE_:map中的value变量类型

NAME_:map中的key值

PROC_INST_ID:流程启动后生成的该流程全局唯一ID

上图可以看出我存储的类型值是多种类型的,有String、boolean、serializable

我重点想说的就是serializable类型。

3.流程变量中对象的存储

BYTEARRAY_ID:如果该数据为对象,则会存储至act_ge_bytearray表中,该值就是这个对应的主键ID。

当我们启动流程后Map中存储的数据为对象类型,框架会在启动时候,将数据存储至act_ge_bytearray表中,然后分配对应的主键ID做关联查询,并且该act_ru_variable表中对应的数据TYPE_为serializable

我们去act_ge_bytearray表中查询后可以看出对应的值被存储在BYTES_中,类型是BLOB,且NAME_字段值被加了前缀var

这个时候有同学会问了,那如果我的流程结束后存到了历史流程表中后,数据咋整嘞?

下图可以看出flowable做了额外处理来区分正在进行的流程变量和历史流程变量

有一点需要提醒一下同学们

有时NAME_字段的值会相同但是BYTES资源的值不同,但是!!!

这两个不是一个流程,只是在不同的流程中,传递的map的key相同!!!

重点还是要根据ID_来区分!!!

下图(act_ru_variable表)中可以看出,虽然二者的NAME_一样,但是流程业务实例ID(PROC_INST_ID)绝对不是一样的。这是因为我们传递的是MAP,而MAP的特点就是key相同后覆盖value,所以一个流程中绝对不会出现两个相同的变量名!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值