Activiti6.0表結構完整分析記錄

Activiti 是一個針對企業用戶、開發人員 、系統管理員的輕量級工作流業務管理平臺(Business Process Management, 簡稱BPM),其核心是使用 Java 開發的快速 、 穩定的 BPMN2.0 流程引擎 。Activiti是開源的,並基於Apache許可發行。Activiti可以在任何Java應用程序、服務器、集羣或雲中運行,它可以與 Spring 完美集成。

Activiti Github地址:https://github.com/Activiti/Activiti

工作流的生命週期

在介紹Activiti的表結構之前,非常有必要先對工作流的生命週期有一定的瞭解。因爲在對業務流程進行設計與運行的過程中,都在體現着工作流的生命週期,並且,Activiti的表結構中有一部分也是基於生命週期設計的。

一個完整的工作流生命週期會經過以下五個階段:定義、發佈、執行、監控、優化。
在這裏插入圖片描述

  • 定義:業務需求人員收集業務需求,然後交由開發人員加工轉化爲計算機可以識別的流程定義
  • 發佈:開發人員打包各種資源,然後在系統管理平臺中發佈流程定義(包括流程定義文件 、自定義表單 、 任務監聽類等資源 )
  • 執行:流程引擎按照事先定義好的流程,以任務驅動的方式予以執行
  • 監控:監控依賴執行階段 。業務人員在辦理任務的同時,引擎會收集每個任務的辦理結果,然後根據結果做出處理
  • 優化:對整個流程的運行結果進行分析,在此基礎上進一步改進,並再次開始一個新的週期

Activiti表結構

Activiti(6.0.0)總共包含28張數據表,所有的表名默認以"ACT_"開頭

Activiti數據表按類別可以分爲五大類:

數據表分類 描述
ACT_GE_* 通用數據表(2張)
ACT_HI_* 歷史數據表(8張)
ACT_ID_* 身份數據表(4張)
ACT_RE_* 倉庫數據表(3張)
ACT_RU_* 運行時數據表(9張)

上述總共26張表,剩餘兩張表:

數據表分類 描述
ACT_EVT_LOG 事件日誌數據表
ACT_PROCDEF_INFO 流程定義動態改變信息表

一、通用數據表

數據表分類 描述
ACT_GE_PROPERTY 屬性表
ACT_GE_BYTEARRAY 資源表

1. ACT_GE_PROPERTY

在這裏插入圖片描述
該表爲屬性表,保存流程引擎的KV鍵值屬性,用於存儲流程引擎的級別信息,包括數據庫歷史操作和數據庫版本等,在啓動流程引擎時創建。上圖中底下的三條記錄是創建數據庫時自動插入的,插入語句寫在建表的 sql 語句中。
在這裏插入圖片描述
該表的字段說明:

  1. cfg.execution-related-entities-cout:流程執行相關的實例計數器功能,默認是關閉的,開啓後在 ACT_RU_EXECUTION 表的後幾個帶有 *COUNT 的字段會顯示計數信息,可以通過配置 activiti.cfg.xml 添加以下語句來開啓配置。
<property name="enableExecutionRelationshipCounts" value="true"/>
  1. next.dbid:記錄數據庫的主鍵ID,每對數據庫進行一次修改(如部署流程定義文件)該值就會發生變化:next.dbid值+步長,默認步長idBlockSize = 2500。其中的 VALUE_ 和 REV_ 初始值爲1,上圖中表示我總共進行了59次修改:1+59*2500=147501
  2. schema.history:表示對Activiti整個數據庫的操作歷史,這裏是 create,表示目前僅做過創建表的操作,若整個數據庫是從5.x的版本進行升級的,那麼該值就會是update的值,同時 REV_ 的值會+1
  3. schema.history:表示Activiti的數據庫的版本

通過 ManagementService 的 getProperties 方法可以獲取屬性值

/**
 * 獲取屬性表中的屬性信息
 */
public static void getProperties(){
    ManagementService managementService = processEngine.getManagementService();
    Map<String, String> properties = managementService.getProperties();
    for(String str: properties.keySet()){
        logger.info(str + ":" + properties.get(str));
    }
}

2. ACT_GE_BYTEARRAY

在這裏插入圖片描述
該表爲資源表,用於保存Activiti運行過程中的資源(如:流程定義文件bpmn和對應的png圖片,需要持久化保存的序列化對象,手工添加的資源信息)

關鍵字段說明:

  1. REV_:該字段爲版本號,本質是一個樂觀鎖,若我們對資源文件進行過修改操作,該值+1;
  2. DEPLOYMENT_ID_:流程資源文件對應的流程部署ID;
  3. BYTES_:流程定義文件一般都是以大對象進行保存,類型爲BLOB;點擊該字段的值,若爲PNG的圖片信息,我們將顯示方式由文本改爲圖片,會在下方顯示流程圖片;
  4. GENERATED_:表示該資源是手動添加的還是自動生成的,0爲用戶添加,1爲引擎生成;若我們在部署資源文件的時候只添加了bpmn文件,流程引擎會爲我們自動生成 png的圖片

除了以資源文件添加的方式,也可以通過手工方式添加資源信息,我們以插入一個字符串爲例:

    public static void testByteArrayInsert(){
        ManagementService managementService = processEngine.getManagementService();
        managementService.executeCommand(new Command<Object>() {
            @Override
            public Object execute(CommandContext commandContext) {
                ByteArrayEntityImpl entity = new ByteArrayEntityImpl();
                entity.setId("10004");
                entity.setName("testSource");
                entity.setBytes("testSource".getBytes());
                commandContext.getByteArrayEntityManager().insert(entity);
//                commandContext.getByteArrayEntityManager().deleteByteArrayById("10004");
                return null;
            }
        });
    }

二、流程定義存儲表

數據表分類 描述
ACT_RE_DEPLOYMENT 流程部署表
ACT_RE_PROCDEF 流程定義表
ACT_RE_MODEL 流程模型表

1. ACT_RE_DEPLOYMENT

該表爲流程部署表,用於記錄流程的部署情況(流程部署的名稱、類別、key標識、租戶ID、部署時間等)
在這裏插入圖片描述
關鍵字段說明:

  1. CATEGORY_:用於標記該流程所屬的流程類型
  2. KEY_:流程標識
  3. TENANT_ID_:該流程所屬的租戶,不同租戶對應的流程爲不同的版本

想要對上表中的字段有更清晰地認識,可以操縱下面這段代碼:

/**
 * 部署流程定義文件
 */
private static void deploy() {
  Deployment deployment = processEngine.getRepositoryService()
	.createDeployment()
	.addClasspathResource("diagrams/MyProcess.bpmn")
	.addClasspathResource("diagrams/MyProcess.png")
	.name("FirstApprove流程")
  	.category("測試流程")
 	.tenantId("A")
  	.key("simpleForm")
  	.activateProcessDefinitionsOn(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")
  	.parse("2020-04-15 09:46:00:545"))
	.deploy();
  System.out.println("流程部署ID:"+deployment.getId());
  System.out.println("流程部署Name:"+deployment.getName());
}

1)當我們部署了一個流程的時候,默認是激活狀態的,若我們設置了 activateProcessDefinitionsOn則表示流程未激活,需要以手工方式進行激活。2)上述代碼執行後,相應的有三張表發生了變化,ACT_GE_BYTEARRAY 表中增加了兩條資源記錄,ACT_RE_DEPLOYMENT 表中增加了一條部署記錄,ACT_RE_PROCDEF 表中增加了一條流程定義信息記錄。

2. ACT_RE_PROCDEF

該表爲流程定義信息表,用於記錄部署的流程定義信息
在這裏插入圖片描述
關鍵字段說明:

  1. REV_:表示的是樂觀鎖(對流程的修改操作後,該字段值加1,如對流程定義的暫定和激活操作)
    在這裏插入圖片描述

  2. CATEGORY_:流程定義類別,表示的是流程定義文件(xml格式)中的targetNamespace的屬性值
    在這裏插入圖片描述

  3. NAME_:流程定義文件的 name 屬性值

  4. KEY_:流程定義文件的ID值,我們一般以 KEY 值作爲流程定義的唯一表標識,並且通過 KEY 值來啓動流程定義文件

  5. VERSION_:流程定義的版本號,只要流程定義的ID值不變,每進行一次流程發佈,該值加1

  6. DESCRIPTIONHAS_START_FORM_KEY_ 對應流程定義文件:
    在這裏插入圖片描述

  7. SUSPENSION_STATE_:流程暫停狀態,1爲激活狀態,2爲暫停掛起狀態。

3. ACT_RE_MODEL

模型信息表(用於WEB設計器),在5.x的版本用於WEB設計器,一些json數據會存在此表中,這裏不做過多說明。

三、運行時數據表

數據表分類 描述
ACT_RU_EXECUTION 運行時流程實例執行表
ACT_RU_TASK 運行時任務表
ACT_RU_IDENTITYLINK 運行時參與者信息表
ACT_RU_VARIABLE 運行時變量表
ACT_RU_EVENT_SUBSCR 運行時事件訂閱表
ACT_RU_JOB 運行時作業表
ACT_RU_TIMER_JOB 運行時定時器表
ACT_RU_SUSPENDED_JOB 運行時暫停作業表
ACT_RU_DEADLETTER_JOB 運行時死信表

1. ACT_RU_EXECTION

該表記錄運行時的流程實例與分支的執行信息
在這裏插入圖片描述
該運行時執行表爲啓動下面的流程圖後的結果,我們啓動該流程,首先進入到callActivity(調用式子流程),該子流程會調用第二幅圖中的流程,因此運行時的執行表會有這麼多條記錄(包括兩條主幹線,以及其他的節點記錄)。
在這裏插入圖片描述
在這裏插入圖片描述

關鍵字段說明:

  1. BUSINESS_KEY_:爲業務標識,主流程纔會擁有業務主鍵,可以在開啓流程實例的時候注入,該業務標識只有在主線流程中可以查看到。
    在這裏插入圖片描述
  2. PARENT_ID_:父執行ID,對應的是上一執行信息的ID號
  3. SUPER_EXEC_:調用式子流程的父執行ID(一般爲CallActiviti所對應的ID)
  4. IS_ACTIVE_:是否活動流程實例,0爲非活動,1爲活動(一個分支節點完成,則該分支的IS_ACTIVE會變爲0)
  5. IS_CONCURRENT_:是否併發,0爲非併發,1爲併發(這裏的併發並非並行執行的概念)
  6. IS_SCOPE:是否全局流程執行,0非,1是
  7. IS_EVENT_SCOPE_:是否激活狀態,沒有使用到事件的情況下,一般都爲0
  8. IS_MI_ROOT_:是否多實例根執行流
  9. SUSPENSION_STATE_:掛起狀態,1正常,2掛起
  10. CACHED_ENT_STATE_:緩存結束狀態
  11. LOCK_TIME_:鎖定時間,鎖定時間是不被併發操作的

剩下的幾個帶有 _COUNT_的字段爲其他幾張運行時表的記錄數,需要配置activiti.cfg.xml的
<property name=“enableExecutionRelationshipCounts” value=“true”/>計數器功能,才生效

2. ACT_RU_TASK

該表記錄運行時的 userTask任務信息。
在這裏插入圖片描述
關鍵字段說明:

  1. PARENT_TASK_ID_:父節點任務ID,由父節點間接啓動
  2. OWNER_:擁有人,一般情況下爲空,只有在委託時纔有值
  3. DELEGATION_:委託狀態,PENDING委託中,RESOLVED已處理,無委託則爲空
  4. PRIORITY_:優先級別,默認爲50(Main Config中可配置)
  5. DUE_DATE_:過期時間(Main Config中可配置)
  6. CATEGORY_:類別(Main Config中可配置)
  7. SUSPENSION_STATE_:掛起狀態,1正常,2掛起
  8. CLAIM_TIME_:該任務節點的獲取時間

3. ACT_RU_VARIABLE

記錄運行時的變量信息
在這裏插入圖片描述
關鍵字段說明:

  1. TYPE_:類型integer,String,double,json,null等
  2. BYTEARRAY_ID_:資源信息ID,若該變量需要用到資源表中的信息,則對應的是資源表中的ID值
  3. TEXT2_:存儲持久化對象的對象ID

四、身份數據表

數據表分類 描述
ACT_ID_USER 用戶基本信息表
ACT_ID_GROUP 用戶組表
ACT_ID_MEMBERSHIP 用戶與組關係表
ACT_ID_INFO 用戶擴展信息表

這一類表是五大類中最簡單,最容易理解的,但一般在項目開發中,我們通常會使用自己的用戶表。
Activiti中對用戶和用戶組的支持自帶有POJO對象,並支持序列化。如下面表示 ACT_ID_USER 表對應的POJO類

1. ACT_ID_USER

該表存放用戶的基本信息,包括用戶名、電子郵箱、密碼、照片等
在這裏插入圖片描述
REV:仍然表示的是樂觀鎖,表示對該用戶進行修改的次數。

    public static void setUser() throws Exception {
        User user = identityService.newUser("004");
        user.setFirstName("劉");
        user.setLastName("啓明");
        user.setEmail("[email protected]");
        user.setPassword("123456");
        identityService.saveUser(user);

		//爲某個用戶設置照片
        InputStream imInputStream = IdentityServiceTest.class.getClassLoader()
                .getResourceAsStream("diagrams/photo.jpeg");
        byte[] data = toByteArray(imInputStream);
        String mimeType = "photo";
        Picture picture = new Picture(data, mimeType);
        identityService.setUserPicture("001" ,picture);
        System.out.println("設置用戶成功");
    }

2. ACT_ID_GROUP

用戶組表存放用戶的羣組信息,包括用戶組名、組類型。
在這裏插入圖片描述

private static void setGroup(){
        Group userGroup = identityService.newGroup("01");
        userGroup.setName("用戶組");
        userGroup.setType("用戶");
        identityService.saveGroup(userGroup);
        System.out.println("設置組成功");
    }

當然,上面的 ID_值,不一定要是數字,可以是字符串類型。

3.ACT_ID_MEMBERSHIP

用戶關係表存放用戶隸屬的表,通過 IdentityServiceImpl 的 createMembership(String userId, String groupId) 方法可以直接創建用戶組關係
在這裏插入圖片描述

  private static void setMembership(){
        identityService.createMembership("001", "01");
        identityService.createMembership("003", "01");
        identityService.createMembership("004", "01");
        identityService.createMembership("002", "02");
        identityService.createMembership("003", "03");
        identityService.createMembership("004", "04");
        System.out.println("設置用戶關係成功");
    }

同樣的,這裏的 USER_ID_ 和 GROUP_ID_ 只要是字符串類型就可以。

4. ACT_ID_INFO

用於存放除基本信息外的的擴展信息,如年齡、地址、聯繫方式等
在這裏插入圖片描述

    private static void setInfo(){
        identityService.setUserInfo("001", "age", "18");
        identityService.setUserInfo("001", "address", "BeiJing");
    }

關鍵字段說明:

  1. TYPE_:信息類型,可以設置用戶賬號(account)、用戶信息(userinfo)和NULL三種值。
  2. PASSWORD_:用戶賬號的密碼字段,當前的Activiti版本並沒有使用該字段。
  3. PARENT_ID_:該信息的父信息ID,如果一條數據設置了父信息ID,則表示該數據是用戶賬號(信息)的明細數據,例如一個賬號有激活日期,那麼激活日期就是該賬號的明細數據,此處使用了自關聯來實現。

五、歷史數據表

數據表分類 描述
ACT_HI_ACTINST 歷史節點信息表
ACT_HI_ATTACHMENT 歷史附件表
ACT_HI_COMMENT 歷史評論表
ACT_HI_DETAIL 歷史詳細變更表
ACT_HI_IDENTITYLINK 歷史參與者表
ACT_HI_PROCINST 歷史流程實例表
ACT_HI_TASKINST 歷史任務表
ACT_HI_VARINST 歷史變量表

1. ACT_HI_PROCINST

歷史流程實例表,該表記錄流程引擎啓動的流程實例。只要有一條實例啓動,無論該實例是否完成,都會在該表中插入一條記錄。
在這裏插入圖片描述
關鍵字段說明:

  1. DURATION_:記錄流程開始到結束的時間,單位爲毫秒

  2. SUPER_PROCESS_INSTANCE_ID_:調用式子流程中的父流程的ID值

2. ACT_HI_ACTINST

歷史節點信息表,該表記錄流程運行過程中的每個節點信息,包括開始節點、結束節點、用戶任務、服務任務、網關等
在這裏插入圖片描述
關鍵字段說明:

  1. TASK_ID_:只有用戶任務纔有TASK_ID值

  2. CALL_PROC_INST_ID_:針對callActivity調用式子流程中的被調用的流程實例ID值

3. ACT_HI_TASKINST

用戶任務實例表,記錄歷史的用戶任務信息
在這裏插入圖片描述
關鍵字段說明:

  1. PARENT_TASK_ID_:父節點調用的任務ID
  2. CLAIM_TIME_:該節點的獲取時間
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章