1. 程式人生 > >Activiti的流程例項【ProcessInstance】與執行例項【Execution】

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

最近,我在做流程引擎Activiti相關的東西,剛開始時的一個知識點困擾了我許久,那就是Activiti的ProcessInstance與Execution的區別,這是一個Activiti的難點,能夠懂得這個,Activiti也就入門大半了,下面,我就細緻的講解一下他們的區別。 (1)首先,我們來看一張我總結的圖片``(這個圖片中兩條紅色的execution包含閘道器與開始與結束節點,這個圖片能夠理解,那就不用再細緻的看了)`` ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2020101921322717.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODE2NzAy,size_16,color_FFFFFF,t_70#pic_center) 這張圖片就細緻的說明了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 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201019214422257.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODE2NzAy,size_16,color_FFFFFF,t_70#pic_center) (ii)下面我們來說一下圖中的分支流程部分,在圖中可以看出,``一個流程會對應一個ProcessInstance還有與分支數量相同的Execution``,然後我們通過act_ru_exection表中的資料細緻的分析與對比一下 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201019215849461.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODE2NzAy,size_16,color_FFFFFF,t_70#pic_center) 此時我們圖中所畫的流程圖在act_ru_execution表中對應的三條資料,與單線流程的知識相結合可以得知,吃屎得第一條資料對應的就是ProcessInstance的相關資料,三條資料的PROC_INST_ID_相等,可以得知它們是屬於同一流程,再通過下面兩條資料的PARENT_ID_等於第一條資料的PROC_INST_ID_可以知道,這兩條資料是兩條不同分支的執行例項資訊Execution (2)然後,我們再在程式碼層面說說ProcessInstance與Execution的關係 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201019221049153.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODE2NzAy,size_16,color_FFFFFF,t_70#pic_center) 在這裡,我們可以看出``ProcessInstance繼承與Execution``,本質上ProcessInstance與Execution是一個