Activiti的流程例項【ProcessInstance】與執行例項【Execution】

debug的勇士發表於2020-10-19

最近,我在做流程引擎Activiti相關的東西,剛開始時的一個知識點困擾了我許久,那就是Activiti的ProcessInstance與Execution的區別,這是一個Activiti的難點,能夠懂得這個,Activiti也就入門大半了,下面,我就細緻的講解一下他們的區別。
(1)首先,我們來看一張我總結的圖片(這個圖片中兩條紅色的execution包含閘道器與開始與結束節點,這個圖片能夠理解,那就不用再細緻的看了)
在這裡插入圖片描述
這張圖片就細緻的說明了Activiti中流程例項ProcessInstance與Execution的區別,ProcessInstance與Execution的區別主要表現在有分支的流程中:
(i)如果流程是單線流程,那麼此時的ProcessInstance就是Execution,這可以再資料庫表act_ru_execution表中看出,在資料庫表act_ru_exection表中的ID_與PROC_INST_ID_的值相同,這時的資料代表的就是ProcessInstance的相關資料,標紅的資料再與上面條資料進行對比,就會非長容易的發現,再標紅的資料下面沒有資料的PARENT_ID_是等與標紅的PROC_INST_ID_的,因為act_ru_execution表就是執行例項表,所以ProcessInstance也就是Execution的一種特殊情況,所以此時的ProcessInstance就是Execution
在這裡插入圖片描述
(ii)下面我們來說一下圖中的分支流程部分,在圖中可以看出,一個流程會對應一個ProcessInstance還有與分支數量相同的Execution,然後我們通過act_ru_exection表中的資料細緻的分析與對比一下
在這裡插入圖片描述
此時我們圖中所畫的流程圖在act_ru_execution表中對應的三條資料,與單線流程的知識相結合可以得知,吃屎得第一條資料對應的就是ProcessInstance的相關資料,三條資料的PROC_INST_ID_相等,可以得知它們是屬於同一流程,再通過下面兩條資料的PARENT_ID_等於第一條資料的PROC_INST_ID_可以知道,這兩條資料是兩條不同分支的執行例項資訊Execution
(2)然後,我們再在程式碼層面說說ProcessInstance與Execution的關係
在這裡插入圖片描述
在這裡,我們可以看出ProcessInstance繼承與Execution,本質上ProcessInstance與Execution是一個東西。

相關文章