Activiti6.0教程 28張表解析 (三)

坐看雲起時_雨宣發表於2019-06-15

使用Activit的朋友都知道Activiti對應的有28張表,今天我們就來說下Activit中28張表對應的含義是什麼?

如何建立表?

在Activiti中建立表有三種方式,我們依次來看下:

一、通過硬編碼的形式直接指定

  // 建立一個流程成引擎對像
  ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration
     .createStandaloneInMemProcessEngineConfiguration();
  // 設定資料庫連線資訊
  processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
  processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/db_activiti");
  processEngineConfiguration.setJdbcUsername("root");
  processEngineConfiguration.setJdbcPassword("");
  processEngineConfiguration.setDatabaseType("mysql");
  processEngineConfiguration.setDatabaseSchemaUpdate("update");

 // 設定自動建立表
 processEngineConfiguration.setDatabaseSchemaUpdate("true");
 // 在建立引擎物件的時候自動建立表
 ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();

二、通過activit.cfg.xml配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db_activiti?characterEncoding=utf8" />
    <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
    <property name="jdbcUsername" value="root" />
    <property name="jdbcPassword" value="" />
    <property name="databaseSchemaUpdate" value="true" />
    <property name="databaseType" value="mysql"></property>
  </bean>

</beans>
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

三、使用配置檔案,在資源目錄下建立activiti-context.xml

<!-- 建立流程引擎配置物件 -->
<bean id="ProcessEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
   <property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
   <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db_activiti" />
   <property name="jdbcUsername" value="root" />
   <property name="jdbcPassword" value="" />
   <property name="databaseSchemaUpdate" value="true" />
</bean>

程式碼裡邊讀取載入配置檔案

String resource = "activiti-context.xml";
String beanName = "ProcessEngineConfiguration";
ProcessEngineConfiguration cf = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(resource, beanName);
ProcessEngine processEngine = cf.buildProcessEngine();

以上就是建立表的三種方式,接下來我們看建立好的表都有哪些?

先上一張圖,後面詳細說。

Activiti中表的詳細介紹

 通用資料表

通用資料表用於存放一些通用的資料,這些表本身不關心特定的流程或者業務,只用於其存放這些業務或者流程所使用的特定的資源,它們可以獨立存在於流程引擎或者應用系統當中,其他的資料表也可以使用這些表的資料,它們都是以ACT_GE開頭,GE的單詞是general前兩個字母的縮寫。

ACT_GE_BYTEARRAY

    用於儲存與流程引擎相關的資源,只要呼叫了Activit儲存服務的API,其提供的資源均會轉換成byte陣列並儲存到這個表中。資源表設計了一個byte欄位,用來儲存資源的內容,因此理論上可以儲存任何資源型別(檔案,或者其他來源的輸入流)。一般情況下,Activit使用這個表來儲存字串、流程檔案的內容和流程圖片內容等。

ACT_GE_BYTEARRAY

  • ID_:資料表的主鍵,在Mysql中欄位型別為varchar,長度位64,Activit有自己的主鍵生成策略,每個資料表的ID_欄位值,在整個流程中是唯一的
  • REV_:資料版本,Activit為一些有可能頻繁修改的資料表加入該欄位,用來標識該資料被操作的次數。
  • NAME_:資源名稱,型別為varchar,長度255
  • DEPLOYMENT_ID_:一次部署可以新增多個資源,該欄位與部署表ACT_RE_DEPLOYMENT的主鍵關聯
  • BYTES_:資源內容,資料型別為longblob,最大可儲存4GB的資料
  • GENERATED_:是由Activit自動產生的資料,0表示false,1表示true

屬性表

ACT_GE_PROPERTY

Activit將全部的屬性抽象為 key-value對,每個屬性都有名稱和值,使用ACT_GE_PROPERTY來儲存這些屬性,該表的欄位包含如下:

  • NAME_:屬性名稱,varchar型別,長度64
  • VALUE_:屬性值,長度300
  • REV_:資料的版本號

流程儲存表

  流程引擎中使用儲存表來儲存流程定義和部署資訊這類資料,儲存表名稱以ACT_RE開頭,RE是repository單詞的前兩個字母,可以理解為倉庫的意思

部署資料表 

   在Activit中,一次部署可以新增多個資源,資源會被儲存到資源表(ACT_GE_BYTEARRA)中,而部署資訊,則儲存到部署表中,部署表位ACT_RE_DEPLOYMENT,其包含以下三個欄位

ACT_RE_DEPLOYMENT

  • ID_:主鍵
  • NAME_:部署名稱
  • DEPLOYMENT_TIME_:部署時間,型別為timestamp

以上是哪個欄位除了NAME_可以不設定之外,其他欄位在資料寫入時必須設定值

流程定義表

Activit在部署新增資源時,如果釋出部署檔案是流程檔案(.bpmn或者.bpmn20.xml)其除了會講內容儲存到資源表外,還會解析流程檔案的內容,並形成特定的流程定義資料,寫入到流程定義表中(ACT_RE_PROCDEF),ACT_RE_PROCDEF包含以下欄位:

ACT_RE_PROCDEF

  • ID_:主鍵,與其他資料表不同的是,ACT_RE_PROCDEF表的主鍵是組合主鍵,一般使用一定的規則來產生主鍵
  • REV_:資料版本號
  • CATEGORY_:流程定義分類
  • NAME_:流程定義名稱
  • KEY_: 流程定義的KEY
  • VERSION_:流程定義的版本
  • DEPLOYMENT_ID_:流程定義的對應的資源名稱,一般為流程檔案的相對路徑
  • RESOURCE_NAME_:流程定義的對應的資源名稱
  • DGRM_RERSOURCE_NAME_:流程定義的對應流程圖的資源名稱
  • HAS_START_FORM_KEY_:流程檔案是否有開始表單,可以在時間中使用activiti:formKey屬性來配置開始表單
  • SUSPENSION_STATE_:表示流程定義的狀態是啟用還是終止,如果是終止,那麼將不能啟動流程

 身份資料表

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

使用者表

流程引擎使用者的資訊被保護在ACT_ID_UESR表中,該表有以下幾個欄位

ACT_ID_UESR

  • ID_:主鍵
  • REV_:資料版本號
  • FIRST_:名字的名稱
  • LAST_:名字的姓氏
  • EMAIL_:使用者郵箱
  • PWD_:使用者密碼
  • PICTURE_ID_:使用者圖片,對應資源表的資料ID

使用者賬號(資訊)表

Activit將使用者,使用者賬號和身份資訊分成三種資料,其中使用者表儲存使用者的資料,而使用者賬號和使用者資訊則被儲存到ACT_ID_INFO表中,該類有如下欄位

ACT_ID_INFO

  • ID_:主鍵
  • REV_:資料版本
  • USER_ID_:對應使用者表的資料ID
  • TYPE_:資訊型別,當前可以設定使用者的帳號(account)、使用者資訊(userinfo)和NULL三種值
  • KEY_:資料的鍵
  • VALUE_:資料的值
  • PASSWORD_:使用者帳號的密碼欄位,不過當前Activiti並沒有使用該欄位
  • PARENT_ID_:該資訊的父資訊ID,如果一條資料設定父資訊ID,則表示該資料是使用者帳號(資訊)的明細資料。比如有個資訊有明細,那麼明細就是這個帳號的資料。

使用者組表

ACT_ID_GROUP

  • ID_:主鍵
  • REV_:資料版本
  • NAME_:使用者組名稱
  • TYPE_:使用者組型別,型別不由Activit提供,某些業務中,Activit會根據該欄位進行查詢。

關係表

ACT_ID_MEMBERSHIP

  • USER_ID_:使用者ID,不能為null
  • GROUP_ID_:使用者組ID,不能為null

執行時資料表

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

流程例項(執行流)表

當流程啟動後,會產生-一個流程例項,同時會產生相應的執行流,流程例項和執行流資料均被儲存在ACT_ RU_ EXECUTION表中。如果一個流程例項只有一條執行流,那麼該表中只產生一條資料,該資料既表示執行流,也表示流程例項。ACT_ RU_ EXECUTION表有以下欄位。

ACT_ RU_ EXECUTION

  • ID_:主鍵,由Activiti的主鍵生成策略產生。
  • REV_: 資料版本。
  • PROC_ INST_ _ID_ :流程例項ID,一個流程例項有可能會產生多個執行流,該欄位表示執行流所屬的流程例項。
  • BUSINESS_ KEY_ :啟動流程時指定的業務主鍵。
  • PARENT_ ID_ :流程例項(執行流)的ID, 一個流程例項有可能會產生執行流,新的執行流資料以該欄位標識其所屬的流程例項。
  • PROC_ DEF_ _ID_ :流程定義資料的ID。
  • SUPER_ EXEC_ :父執行流的ID,一個執行流可以產生新的流程例項,該流程例項資料使用該欄位標識其所屬的流程例項。
  • ACT_ ID_ :當前執行流行為的ID, ID在流程檔案中定義。
  • IS_ ACTIVE_ :該執行流是否活躍的標識。
  • IS_ CONCURRENT_ :執行流是否正在並行。
  • IS_ SCOPE :是否在執行流範圍內。
  • IS_ EVENT_ SCOPE_ :是否在事件範圍內。
  • SUSPENSION STATE_ :標識流程的中斷狀態。
  • CACHED_ ENT_ STATE_ :流程實體的快取,取值為0~7。

流程任務表

流程在執行過程中所產生的任務資料儲存在ACT_ RU_TASK表中,任務有如下欄位。

ACT_ RU_TASK

  • ID_: 主鍵,由Activiti的主鍵生成策略產生。
  • REV_:資料版本號。
  • EXECUTION _ID_ :任務所處的執行流ID。
  • PROC_ _INST_ .ID_ :對應的流程例項ID。
  • PROC_ DEF _ID_ :對應流程定義資料的ID。
  • NAME_ :任務名稱,在流程檔案中定義。
  • PARENT_TASK_ ID_ :父任務ID, 子任務才會設定該欄位的值。
  • DESCRIPTION_ :任務描述,在流程檔案中配置。
  • TASK_ DEF_ KEY_ :任務定義的ID值,在流程檔案中定義。
  • OWNER_ :任務擁有人,沒有做外來鍵關聯。
  • ASSIGNEE_ :被指派執行該任務的人,沒有做外來鍵關聯。
  • DELEGATION_ :任務委託狀態,有等候中和已解決兩種狀態。
  • PRIORITY_: 任務優先順序,預設為50, 型別為int, 長度為11
  • CREATE .TIME_ :任務建立時間,型別為timestamp。
  • DUE_ DATE_ :任務預訂日期,型別為datetime

流程參數列

Activiti提供了ACT_ RU_ VARIABLE表來存放流程中的引數,這類引數包括流程例項引數、執行流引數和任務引數。引數可以會有多種型別,因此該表有多個欄位用來存放引數值。ACT_ RU_ VARIABLE表有以下欄位。

ACT_ RU_ VARIABLE

  • ID_:主鍵,由Activiti 的主鍵生成策略產生。
  • REV_: 資料版本號。
  • TYPE_ :引數型別,該欄位值可以為boolean. bytes、serializable. date. double、 integer、jpa-entity、long、 null、 short 或string,這些欄位值均為Activiti 提供,還可以通過自定義來擴充套件引數型別。
  • NAME_ :引數名稱。
  • EXECUTION_ ID_: 該引數對應的執行ID, 可以為null.
  • PROC_ INST_ ID_ :該引數對應的流程例項ID, 可以為null。
  • TASK_ ID_ :如果該引數是任務引數,就需要設定任務ID。
  • BYTEARRAY .ID_ :如果引數值是序列化物件,那麼可以將該物件作為資源儲存到資源表中,該欄位儲存資源表中資料的ID.
  • DOUBLE_:引數型別為double,則值會儲存到該欄位中。
  • LONG_ :引數型別為long, 則值會儲存到該欄位中。
  • TEXT_:用於儲存文字型別的引數值,該欄位為varchar 型別,長度為4 000。
  • TEXT2_ :與TEXT_欄位一樣,用於儲存文字型別的引數值。

 流程與身份關係表

使用者組和使用者之間存在的關係,使用ACT_ ID_ MEMBERSHIP表儲存。使用者或者使用者組與流程資料之間的關係,則使用ACT_ RU_ IDENTITYLINK表進行儲存。相比於ACT_ ID _MEMBERSHIP表,ACT_ RU_ IDENTITYLINK 表的欄位更多一些。

ACT_ RU_ IDENTITYLINK

  • ID_:主鍵,由Activiti的主鍵生成策略產生。
  • REV_ :資料版本號。
  • GROUP_ _ID_ :該關係資料中的使用者組ID。
  • TYPE_ :該關係資料的型別,當前提供了3個值: assignee、 candidate和owner, 表示流程資料的指派人(組)、候選人(組)和擁有人。
  • USER_ ID_ :關係資料中的使用者ID。
  • TASK_ID_ :關係資料中的任務ID.
  • PROC DEF_ .ID_ :關係資料中的流程定義ID

工作資料表

在流程執行的過程中,會有一些工作需要定時或者重複執行,這類工作資料被儲存到ACT RU_ JOB表中。ACT_ RU_ JOB表有以下欄位。

ACT_ RU_ JOB

  • ID_:主鍵,由Activiti的主鍵生成策略產生。
  • REV_ :資料版本號。
  • TYPE_:工作型別,值為message或者timer
  • LOCK_EXP_TIME_:工作鎖定的結束時間表示
  • LOCK_OWNER_:工作鎖定標識,預設為UUID
  • EXCLUSIVE_:工作是否需要單獨執行
  • EXECUTION_ID_:產生工作的執行流ID
  • PROCESS_INSTANCE_ID_:產生郭總的流程例項ID
  • RETRIES_:工作的剩餘執行次數,預設值為3
  • EXCEPTION_STACK_ID_:當任務執行丟擲異常時,異常堆疊資訊會被儲存到資源標中,該ID為關係資源表中儲存的異常堆疊資訊的資料ID
  • EXCEPTION_MSG_:異常資訊
  • DUEDATE_:工作執行時間
  • PEPEAT_:工作重複執行次數
  • HANDLER_TYPE_:標識工作的處理類
  • HANDLER_CFG_:工作相關的資料配置

事件描述表

ACT_RU_EVENT_SUBSCR

  • ID_:
  • REV_:
  • EVENT_TYPE_:事件型別
  • EVENT_NAME_:事件名稱
  • EXECUTION_ID_:事件所在的執流程ID
  • PROC_INST_ID_:事件所在的流程例項ID
  • ACTIVITY_ID_:具體事件的ID
  • CONFIGURATION_:事件的屬性配置
  • CREATED_:事件的建立時間

歷史資料表

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

流程例項表

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

ACT_HI_PROCINST

  • START_ACT_ID:開始活動的ID
  • END_ACT_ID:流程最後一個活動的ID
  • EDLETE_REASON_:該流程例項刪除的原因

流程明細表

    流程明細表(ACT_ HI_ DETAIL)會記錄流程執行過程中的引數或者表單資料。由於在流程執行過程中,會產生大量這類資料,因此預設情況下,Activiti 不會儲存流程明細資料,除非將流程引擎的歷史資料(history) 配置為full。流程的歷史明細資料表與執行時參數列的設計類似.

    當流程到達某個任務節點時,就會向歷史任務表(ACT_ HI _TASKINST)中寫入歷史任務資料。歷史任務表與執行時的任務表設計類似,在執行時任務表的基礎上,額外提供了任務開始時間(START _TIME_ )、結束時間(END_ TIME_ )和刪除原因(DELETE_ REASON_ )三個欄位。其中開始時間和結束時間欄位型別均為datetime,如果任務被正常完成,那麼刪除原因欄位值為completed。

     歷史行為表(ACT_ HI_ ACTINST)會記錄每一個流程活動的例項,- 一個流程活動將會被記錄為一條資料。例如有一個流程,開始事件、使用者任務和結束事件各有一個,當流程結束後,就會產生3條歷史行為資料。歷史行為表有如下欄位。

ACT_HI_ACTINS

  • ID_:主鍵,由Activiti主鍵生成策略產生。
  • PROC_DEF_ ID_ :流程定義ID。
  • PROC INST_ID_ :流程例項ID.
  • EXECUTION_ID_ :執行流ID。
  • ACT_ID_ :流程活動的ID, 在流程檔案中定義。
  • ACT_ NAME_ :活動的名稱。
  • ACT_TYPE_ :活動型別,例如開始事件,活動名稱為startEvent。
  • ASSIGNEE_ :活動指派人。
  • START_TIME_ :活動開始時間,即執行流到達活動時的時間。
  • END_TIME_ :活動結束時間,即執行流離開該活動時的時間。
  • DURATION_:活動持續時間
  •  附件表和評論表

     使用任務服務(TaskService) 的API,可以新增附件和評論,這些附件和評論的資料將會儲存到ACT HI ATTACHMENT表和ACT_ HI COMMENT表中,ACT_ HI ATTACHMENT表有如下欄位。

ACT_ HI ATTACHMENT

  • ID_:主鍵,由Activiti的主鍵生成策略產生。
  • REV_: 資料版本號。
  • USER_ .ID_ :附件對應的使用者ID, 可以為null.➢NAME_ :附件名稱。
  • DESCRIPTION :附件描述。➢TYPE _: 附件型別。
  • TASK_ ID_ :該附件對應的任務ID。
  • PROC INST_ ID _:對應的流程例項ID。➢URL_ :連線到該附件的URL。
  • CONTENT_ .ID_ :附件內容ID,附件的內容將會被儲存到資源表中,該欄位記錄資源資料ID. 

 ACT_ HI_ COMMENT表實際不只儲存評論資料,它還會儲存某些事件資料,但它的表名.為COMMENT,因此更傾向把它叫作評論表,該表有如下欄位。

ACT_ HI_ COMMENT

  • ID_: 主鍵,由Activiti的主鍵生成策略產生。
  • TYPE :評論的型別,可以設定為event或者comment, 表示事件記錄資料或者評論資料。
  • TIME_ :資料產生的時間。
  • USER_ ID_: 產生評論資料的使用者ID。
  • TASK .ID_ :該評論資料的任務ID。
  •  PROC_ _INST .ID_ :資料對應的流程例項ID。
  • ACTION :該評論資料的操作標識。
  • MESSAGE_ :該評論資料的資訊。
  • FULL_ MSG_ :該欄位同樣記錄評論資料的資訊。
      雖然附件表和評論表的命名遵守歷史資料表的命名規範(以ACT_HI開頭),但是可以呼叫其他服務元件的API 來往這兩個表中寫入資料,以筆者的理解,歷史資料表實際上儲存的是那種-經寫入,就很少會發生變化(結構性變化)的資料。

 

 

相關文章