使用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_:活動持續時間
-
附件表和評論表
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_ :該字段同樣記錄評論數據的信息。