1. 程式人生 > >Activiti工作流框架學習(一)之通用資料表詳細介紹

Activiti工作流框架學習(一)之通用資料表詳細介紹

文/朱季謙

Activiti工作流引擎自帶了一套資料庫表,這裡面有一個需要注意的地方:

低於5.6.4的MySQL版本不支援時間戳或毫秒級的日期。更糟糕的是,某些版本在嘗試建立此類列時將引發異常,而其他版本則不會。執行自動建立/升級時,引擎將在執行DDL時更改它。使用DDL檔案方法時,既可以使用常規版本也可以使用其中帶有mysql55的特殊檔案(這適用於低於5.6.4的任何版本)。後一個檔案將具有沒有毫秒精度的列型別。

筆者曾經在5.6.0版本做過試驗,發現是無法自動生成23張表的,但在5.6.4版本以上便可,因此,最好保證mysql版本在5.6.4以上。

 

一.資料庫表名稱說明

Activiti的資料庫表分5大部分,名稱以ACT開頭,第二部分是表用例的兩個字元的標誌,該用例與服務API的大致匹配:

 

 

二.ACT_GE_ *通用資料表


通用資料表用於存放一些通用的資料,這些表本身不關心特定的流程或者業務,只用於存放這些業務或者流程所使用的資源。通用資料表有兩個,分別是ACT_GE_BYTEARRAY與ACT_GE_PROPERTY,它們都是以ACT_GE_*開頭的。

2.1 ACT_GE_BYTEARRAY資源表

表ACT_GE_BYTEARRAY資源表用於保存於流程引擎相關的資源,流程檔案進行部署時,流程定義的圖片以及XML檔案等資料,都會轉換成byte陣列儲存到這個表中。該表設計了一個byte欄位,用來儲存資源的內容,該表包含以下欄位:

 

 

 注:Activiti為了保證整個流程引擎表中所產生的資料主鍵在整個流程引擎中是唯一的,使用了一個DbIdGenerator類生成主鍵,該類中儲存了下一條資料的ID值和當前ID塊最後一個ID值。

 

2.2 ACT_GE_PROPERTY屬性表

Activiti將全部的屬性抽象為key-value對,每個屬性都有名稱和值。

 

 注:在初始化流程資料庫時,會預設加入3條屬性資料:next.dbid、schema.history和schema.version。

next.dbid:屬性值為1時,表示Activiti資料庫表ID生成時,當前ID塊最大值為1(即資料庫裡還沒有任何資料)。前面也提到,流程引擎是使用一個DbIdGenerator類來生成主鍵的,該類儲存了下一條資料的ID值和當前ID塊的最後一個ID值,所謂ID塊就是Activiti資料產生時ID值時,就會從1開始到101進行取值作為資料ID,那麼該ID塊的最大值為101。DbIdGenerator在產生資料ID時,會判斷當前ID值是否大於101(ID塊最大值)。如果大於,則請求重新生成一個ID塊,那麼此時屬性中的next.dbid屬性值將會為201。

schema.history:屬性表示資料表結構的更新歷史,例如——

 

 

 create(5.22.0.0)即表示使用了5.22版本的初始化指令碼建立。

schema.version:表示當前Activiti資料結構的版本。

 

三.ACT_RE_ *流程儲存表

儲存表名稱以ACT_RE開頭,RE是repository單詞的前兩個字母,流程使用儲存表來儲存流程定義和部署資訊相關的資料。

 

3.1.ACT_RE_DEPLOYMENT部署資料表

在流程引擎中,一次部署可以新增多個資源,即可以有圖片與XML之類的資源,這些資源資料會儲存到資源表(ACT_GE_BTYEARRAY),剩餘部署資訊,則儲存到部署表中,部署名為ACT_RE_DEPLOYMENT,包含以下三個欄位:

 

 

 3.2.ACT_RE_PROCDEF流程定義表

Activiti在部署流程檔案時(.bpmn或者.bpmn20.xml),其除了會將內容儲存到資源表外,還會解析流程檔案的內容,形成特定的流程定義資料,寫入到流程定義表(ACT_RE_PROCDEF)中,該表包含了以下的欄位:

 

 

 注:該表的主鍵與其他資料表不同的是,ACT_RE_PROCDEF表的主鍵是組合主鍵,其值為流程定義的KEY_欄位值加流程定義的VERSION_欄位值再加ID生成器生成的ID值,其中這三個值以冒號為分隔符。例如,KEY_值為baoxiaoProcess,VERSION_值為1,ID生成器生成的ID值為722504,則該主鍵為baoxiaoProcess:1:722504,如以下截圖所示:

 

 

 四.ACT_ID_ *身份資料表

Activiti的整個身份證資料模組,可以獨立於流程引擎而存在,身份資料表並沒有儲存流程相關的資料以及關聯,身份表名稱使用ACT_ID關聯,ID是單詞identity的前兩個字母。

4.1.ACD_ID_USER使用者表

流程引擎使用者的資訊被儲存在ACT_ID_USER表中,該表有以下欄位:

 

 

 4.2.ACD_ID_GROUP使用者組表

使用ACT_ID_GROUP表來儲存使用者組的資料,該表有以下幾個欄位:

 

 

  4.3.ACD_ID_MEMBERSHIP關係表

關係表用來描述使用者表與使用者組表的對應關係:

 注:該表的兩個欄位均做了外來鍵約束,寫入該表的資料時,必須要有使用者和使用者組資料與之關聯。

 

 

五.ACT_RU_ *執行時資料表

執行時資料表用來儲存流程在執行過程中所產生的資料,例如流程例項、執行流和任務等,以ACT_RU開頭,RU是單詞runtime的前兩個字母。

5.1.ACT_RU_EXECUTION流程例項表

 流程啟動後,會產生一個流程例項,同時產生相應的執行流,流程例項和執行流資料均被儲存在ACT_RU_EXECUTION表中。如果一個流程例項只要一條執行流,那麼該表中只產生一條資料,該資料既表示執行流,也表示流程例項。

 

 5.2.ACT_RU_TASK流程任務表

流程在執行過程中所產生的任務資料儲存在ACT_RU_TASK,欄位如下:

 

 

  5.3.ACT_RU_VARIABLE流程引數表

流程引擎提供了ACT_RU_VARIABLE表來存放流程中的引數,這類引數包括流程例項引數、執行流引數和任務引數,各引數可以有多種型別。

 

  5.4.ACT_RU_IDENTITYLINK流程與身份關係表

使用者組與使用者之間存在的關係,使用ACT_ID_MEMBERSHIP表儲存。使用者或者使用者組與流程資料之間的關係,則使用ACT_RU_IDENTITYLINK表進行儲存。

 

   5.5.ACT_RU_JOB工作資料表

在流程執行的過程中,會有一些工作需要定時或者重複執行,這類工作資料被儲存到ACT_RU_JOB表中。

 

 

    5.6.ACT_RU_EVENT_SUBSCR事件描述表

如果流程到達某類事件節點,Activiti會往ACT_RU_EVENT_SUBSCR表中加入事件描述資料,這些事件描述資料將會決定流程事件的觸發。

 

 

 六.ACT_HI_ *歷史資料表


歷史資料表就像流程引擎的日誌表。被操作過的流程元素,將會被記錄到李四表中。歷史表名稱以ACT_HI開頭,HI是單詞history的前兩個字母。

6.1.ACT_HI_PROCINST流程例項表

流程例項的歷史資料會被儲存到ACT_HI_PROCINST表中,只要流程啟動,Activiti就會將流程例項的資料寫入ACT_HI_PROCINST表中。除了基本的流程欄位外,與執行時資料表不同的是,歷史流程例項表還會記錄流程的開始活動ID的、活動結束ID等資訊。

 

 6.2.ACT_HI_ACTINST歷史行為表

歷史行為表會記錄每一個流程活動的例項,一個 流程活動將會被記錄成一條資料,例如,流程中有開始事件,使用者任務,結束事件各一個,當流程結束後,該表就會產生3條歷史行為資料。

 

 6.3.附件表ACT_HI_ATTACHMENT

使用任務服務(TaskService)的API,可以新增附件,這些附件資料將會儲存到ACT_HI_ATTACHMENT表中。

 

  6.4.評論表ACT_HI_COMMENT

可以專門存放審批過程中的評論資料。

 

&n