實習工作中需要用到工作流引擎,去實現業務審批流的功能模塊,由於 Flowable 不支持 MariaDB (重要原因之一),所以項目中選擇了 Camunda 工作流引擎。
由於沒有接觸過工作流引擎,所以打算藉此機會詳細記錄一下這個從 0 到 1 到學習過程。
本篇直接從應用開始,通過切實的使用感受來達到由淺入深的效果。
Camunda 官網文檔: https://docs.camunda.org/get-started/spring-boot/project-setup/
網上關於 Camunda 的中文學習資料少之又少,但是可以先學習 Activiti(教程比較多),曲線學習 Camunda。
關於工作流的一些概念和術語就不再本篇的範圍了(網上很多)。
文章目錄
- 啓動 Camunda
- 相關表結構介紹
- act_ge_bytearray 資源(二進制數據)表
- act_re_deployment 流程部署表
- act_re_procdef 流程定義表
- act_ru_execution 運行時流程實例(執行流)表
- act_ru_identitylink 流程與身份關係表(執行流)
- act_ru_task 運行時流程任務(節點)表(執行流)
- act_ru_variable 運行時流程參數(變量)表(執行流)
- act_hi_procinst 流程實例(歷史)表
- act_hi_detail 流程明細(歷史)表
- act_hi_taskinst 歷史任務實例表
- act_hi_actinst 歷史節點(行爲)表
- act_hi_attachment 歷史附件表
- act_hi_comment 歷史意見表
- 總
啓動 Camunda
創建一個 SpringBoot 項目除了要用到的 ORM框架、數據庫驅動等等,還要導入 Camunda 相關依賴:
<!-- https://mvnrepository.com/artifact/org.camunda.bpm.springboot/camunda-bpm-spring-boot-starter-webapp -->
<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
<version>3.4.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.camunda.bpm.springboot/camunda-bpm-spring-boot-starter-rest -->
<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
<version>3.4.4</version>
</dependency>
application.yml 部分配置:
spring:
application:
name: camunda-demo
jackson:
#設置返回前端的參數爲駝峯的轉換形式
property-naming-strategy: SNAKE_CASE
#日期格式化
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
#數據源配置
datasource:
url: jdbc:mysql://127.0.0.1:3306/camunda?serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 1234
mybatis:
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
camunda:
bpm:
#配置賬戶密碼來訪問Camunda自帶的管理界面
admin-user:
id: admin
password: admin
first-name: admin
filter:
create: All tasks
#指定數據庫類型
# database:
# type: mysql
#禁止自動部署resources下面的bpmn文件
auto-deployment-enabled: false
#禁止index跳轉到Camunda自帶的管理界面,默認true
# webapp:
# index-redirect-enabled: false
啓動應用,訪問 http://localhost:8080 (或者其他端口) 就可以看到管理界面,使用配置的賬戶密碼登錄:
到這裏就算是踏出了重要的第一步!
相關表結構介紹
在成功啓動 Camunda 之後,可以到數據庫中看到其自動創建的 47 張表,之後每條流程實例的相關信息就會存放到這些表中!
act_ge_bytearray 資源(二進制數據)表
列名 | 類型 | 長度 | 小數點 | 不是null | 主鍵 | 註釋 |
---|---|---|---|---|---|---|
id_ | varchar | 64 | 0 | 0 | TRUE | 資源ID |
rev_ | int4 | 32 | 0 | -1 | 版本 | |
name_ | varchar | 255 | 0 | -1 | 資源名稱 | |
deployment_id_ | varchar | 64 | 0 | -1 | 部署ID | |
bytes_ | bytea | 0 | 0 | -1 | 文件內容 | |
generated_ | bool | 0 | 0 | -1 | ||
tenant_id_ | varchar | 64 | 0 | -1 | 租戶ID | |
type_ | int4 | 32 | 0 | -1 | 文件類型 | |
create_time_ | timestamp | 6 | 0 | -1 | 創建時間 | |
root_proc_inst_id_ | varchar | 64 | 0 | -1 | 根流程實例ID | |
removal_time_ | timestamp | 6 | 0 | -1 | 調動時間 |
act_re_deployment 流程部署表
列名 | 類型 | 長度 | 小數點 | 不是null | 主鍵 | 註釋 |
---|---|---|---|---|---|---|
id_ | varchar | 64 | 0 | 0 | TRUE | 部署ID |
name_ | varchar | 255 | 0 | -1 | 部署名稱 | |
deploy_time_ | timestamp | 6 | 0 | -1 | 部署時間 | |
source_ | varchar | 255 | 0 | -1 | 資源 | |
tenant_id_ | varchar | 64 | 0 | -1 | 租戶ID |
act_re_procdef 流程定義表
列名 | 類型 | 長度 | 小數點 | 不是null | 主鍵 | 註釋 |
---|---|---|---|---|---|---|
id_ | varchar | 64 | 0 | 0 | TRUE | 流程定義ID |
rev_ | int4 | 32 | 0 | -1 | 流程定義版本(同一個流程同一個標識) | |
category_ | varchar | 255 | 0 | -1 | 流程定義分類 | |
name_ | varchar | 255 | 0 | -1 | 流程定義名稱 | |
key_ | varchar | 255 | 0 | 0 | 流程定義KEY | |
version_ | int4 | 32 | 0 | 0 | 流程定義版本(同一個流程不同的版本) | |
deployment_id_ | varchar | 64 | 0 | -1 | 流程部署ID | |
resource_name_ | varchar | 4000 | 0 | -1 | 資源名稱 | |
dgrm_resource_name_ | varchar | 4000 | 0 | -1 | 流程圖資源名稱 | |
has_start_form_key_ | bool | 0 | 0 | -1 | 是否包含啓動表單KEY(t:true;f:false) | |
suspension_state_ | int4 | 32 | 0 | -1 | 流程定義狀態(激活:1/掛起:2) | |
tenant_id_ | varchar | 64 | 0 | -1 | 租戶ID | |
version_tag_ | varchar | 64 | 0 | -1 | 版本標籤 | |
history_ttl_ | int4 | 32 | 0 | -1 | ||
startable_ | bool | 0 | 0 | 0 |
act_ru_execution 運行時流程實例(執行流)表
名 | 類型 | 長度 | 小數點 | 不是null | 鍵 | 註釋 |
---|---|---|---|---|---|---|
id_ | varchar | 64 | 0 | 0 | TRUE | 執行流ID |
rev_ | int4 | 32 | 0 | -1 | 版本 | |
root_proc_inst_id_ | varchar | 64 | 0 | -1 | 根流程實例ID | |
proc_inst_id_ | varchar | 64 | 0 | -1 | 流程實例ID | |
business_key_ | varchar | 255 | 0 | -1 | 業務KEY | |
parent_id_ | varchar | 64 | 0 | -1 | 父ID | |
proc_def_id_ | varchar | 64 | 0 | -1 | 流程定義ID | |
super_exec_ | varchar | 64 | 0 | -1 | ||
super_case_exec_ | varchar | 64 | 0 | -1 | ||
case_inst_id_ | varchar | 64 | 0 | -1 | ||
act_id_ | varchar | 255 | 0 | -1 | 節點定義ID | |
act_inst_id_ | varchar | 64 | 0 | -1 | 節點實例ID | |
is_active_ | bool | 0 | 0 | -1 | 是否可執行狀態 | |
is_concurrent_ | bool | 0 | 0 | -1 | ||
is_scope_ | bool | 0 | 0 | -1 | ||
is_event_scope_ | bool | 0 | 0 | -1 | ||
suspension_state_ | int4 | 32 | 0 | -1 | 實例狀態(激活:1;掛起:2) | |
cached_ent_state_ | int4 | 32 | 0 | -1 | ||
sequence_counter_ | int8 | 64 | 0 | -1 | 順序計數器 | |
tenant_id_ | varchar | 64 | 0 | -1 | 租戶ID |
act_ru_identitylink 流程與身份關係表(執行流)
運行時流程人員表,主要存儲任務節點和參與者的相關信息。還有與其相對的 act_hi_identitylink
歷史流程人員表。
名 | 類型 | 長度 | 小數點 | 不是null | 鍵 | 註釋 |
---|---|---|---|---|---|---|
id_ | varchar | 64 | 0 | 0 | TRUE | 任務參與ID |
rev_ | int4 | 32 | 0 | -1 | 版本 | |
group_id_ | varchar | 255 | 0 | -1 | 角色/組ID | |
type_ | varchar | 255 | 0 | -1 | 類型(候選人:candidate;代理人:delegation) | |
user_id_ | varchar | 255 | 0 | -1 | 用戶ID | |
task_id_ | varchar | 64 | 0 | -1 | 任務ID | |
proc_def_id_ | varchar | 64 | 0 | -1 | 流程定義ID | |
tenant_id_ | varchar | 64 | 0 | -1 | 租戶ID |
act_ru_task 運行時流程任務(節點)表(執行流)
名 | 類型 | 長度 | 小數點 | 不是null | 鍵 | 註釋 |
---|---|---|---|---|---|---|
id_ | varchar | 64 | 0 | 0 | TRUE | 執行任務ID |
rev_ | int4 | 32 | 0 | -1 | 版本 | |
execution_id_ | varchar | 64 | 0 | -1 | 執行ID | |
proc_inst_id_ | varchar | 64 | 0 | -1 | 流程實例ID | |
proc_def_id_ | varchar | 64 | 0 | -1 | 流程定義ID | |
case_execution_id_ | varchar | 64 | 0 | -1 | ||
case_inst_id_ | varchar | 64 | 0 | -1 | ||
case_def_id_ | varchar | 64 | 0 | -1 | ||
name_ | varchar | 255 | 0 | -1 | 執行任務名稱 | |
parent_task_id_ | varchar | 64 | 0 | -1 | 父級任務ID | |
description_ | varchar | 4000 | 0 | -1 | 任務描述 | |
task_def_key_ | varchar | 255 | 0 | -1 | 任務定義KEY | |
owner_ | varchar | 255 | 0 | -1 | ||
assignee_ | varchar | 255 | 0 | -1 | 簽收人ID | |
delegation_ | varchar | 64 | 0 | -1 | 委託人ID | |
priority_ | int4 | 32 | 0 | -1 | 優先權 | |
create_time_ | timestamp | 6 | 0 | -1 | 創建時間 | |
due_date_ | timestamp | 6 | 0 | -1 | 到期時間 | |
follow_up_date_ | timestamp | 6 | 0 | -1 | 跟催時間 | |
suspension_state_ | int4 | 32 | 0 | -1 | 流程狀態(激活:1;掛起:2) | |
tenant_id_ | varchar | 64 | 0 | -1 | 租戶ID |
act_ru_variable 運行時流程參數(變量)表(執行流)
還有與其相對的 act_hi_varinst
歷史變量表。
名 | 類型 | 長度 | 小數點 | 不是null | 鍵 | 註釋 |
---|---|---|---|---|---|---|
id_ | varchar | 64 | 0 | 0 | TRUE | 運行變量ID |
rev_ | int4 | 32 | 0 | -1 | 版本 | |
type_ | varchar | 255 | 0 | 0 | 變量類型 | |
name_ | varchar | 255 | 0 | 0 | 變量名稱 | |
execution_id_ | varchar | 64 | 0 | -1 | 執行流ID | |
proc_inst_id_ | varchar | 64 | 0 | -1 | 流程實例ID | |
case_execution_id_ | varchar | 64 | 0 | -1 | ||
case_inst_id_ | varchar | 64 | 0 | -1 | ||
task_id_ | varchar | 64 | 0 | -1 | 任務ID | |
bytearray_id_ | varchar | 64 | 0 | -1 | ||
double_ | float8 | 53 | 0 | -1 | ||
long_ | int8 | 64 | 0 | -1 | ||
text_ | varchar | 4000 | 0 | -1 | ||
text2_ | varchar | 4000 | 0 | -1 | ||
var_scope_ | varchar | 64 | 0 | -1 | ||
sequence_counter_ | int8 | 64 | 0 | -1 | 順序計數器 | |
is_concurrent_local_ | bool | 0 | 0 | -1 | ||
tenant_id_ | varchar | 64 | 0 | -1 | 租戶ID |
act_hi_procinst 流程實例(歷史)表
名 | 類型 | 長度 | 小數點 | 不是null | 鍵 | 註釋 |
---|---|---|---|---|---|---|
id_ | varchar | 64 | 0 | 0 | TRUE | 歷史流程實例ID |
proc_inst_id_ | varchar | 64 | 0 | 0 | 流程實例ID | |
business_key_ | varchar | 255 | 0 | -1 | 業務KEY | |
proc_def_key_ | varchar | 255 | 0 | -1 | 流程定義KEY | |
proc_def_id_ | varchar | 64 | 0 | 0 | 流程定義ID | |
start_time_ | timestamp | 6 | 0 | 0 | 開始時間 | |
end_time_ | timestamp | 6 | 0 | -1 | 結束時間 | |
removal_time_ | timestamp | 6 | 0 | -1 | 移除時間 | |
duration_ | int8 | 64 | 0 | -1 | 持續時間 | |
start_user_id_ | varchar | 255 | 0 | -1 | 發起人 | |
start_act_id_ | varchar | 255 | 0 | -1 | 發起節點ID | |
end_act_id_ | varchar | 255 | 0 | -1 | 結束節點ID | |
super_process_instance_id_ | varchar | 64 | 0 | -1 | 頂級流程實例ID | |
root_proc_inst_id_ | varchar | 64 | 0 | -1 | 根流程實例ID | |
super_case_instance_id_ | varchar | 64 | 0 | -1 | ||
case_inst_id_ | varchar | 64 | 0 | -1 | ||
delete_reason_ | varchar | 4000 | 0 | -1 | 刪除原因 | |
tenant_id_ | varchar | 64 | 0 | -1 | 租戶ID | |
state_ | varchar | 255 | 0 | -1 | 狀態 |
act_hi_detail 流程明細(歷史)表
名 | 類型 | 長度 | 小數點 | 不是null | 鍵 | 註釋 |
---|---|---|---|---|---|---|
id_ | varchar | 64 | 0 | 0 | TRUE | 歷史流程明細ID |
type_ | varchar | 255 | 0 | 0 | 類型 | |
proc_def_key_ | varchar | 255 | 0 | -1 | 流程定義KEY | |
proc_def_id_ | varchar | 64 | 0 | -1 | 流程定義ID | |
root_proc_inst_id_ | varchar | 64 | 0 | -1 | 根流程實例ID | |
proc_inst_id_ | varchar | 64 | 0 | -1 | 流程實例ID | |
execution_id_ | varchar | 64 | 0 | -1 | 執行流ID | |
case_def_key_ | varchar | 255 | 0 | -1 | ||
case_def_id_ | varchar | 64 | 0 | -1 | ||
case_inst_id_ | varchar | 64 | 0 | -1 | ||
case_execution_id_ | varchar | 64 | 0 | -1 | ||
task_id_ | varchar | 64 | 0 | -1 | 任務ID | |
act_inst_id_ | varchar | 64 | 0 | -1 | 節點實例ID | |
var_inst_id_ | varchar | 64 | 0 | -1 | 參數實例ID | |
name_ | varchar | 255 | 0 | 0 | 參數名稱 | |
var_type_ | varchar | 64 | 0 | -1 | 參數類型 | |
rev_ | int4 | 32 | 0 | -1 | 版本 | |
time_ | timestamp | 6 | 0 | 0 | 時間 | |
bytearray_id_ | varchar | 64 | 0 | -1 | 流數組ID | |
double_ | float8 | 53 | 0 | -1 | ||
long_ | int8 | 64 | 0 | -1 | ||
text_ | varchar | 4000 | 0 | -1 | ||
text2_ | varchar | 4000 | 0 | -1 | ||
sequence_counter_ | int8 | 64 | 0 | -1 | 順序計數器 | |
tenant_id_ | varchar | 64 | 0 | -1 | 租戶ID | |
operation_id_ | varchar | 64 | 0 | -1 | 操作ID | |
removal_time_ | timestamp | 6 | 0 | -1 | 移除時間 |
act_hi_taskinst 歷史任務實例表
名 | 類型 | 長度 | 小數點 | 不是null | 鍵 | 註釋 |
---|---|---|---|---|---|---|
id_ | varchar | 64 | 0 | 0 | TRUE | 歷史任務實例表ID |
task_def_key_ | varchar | 255 | 0 | -1 | 任務定義KEY | |
proc_def_key_ | varchar | 255 | 0 | -1 | 流程定義KEY | |
proc_def_id_ | varchar | 64 | 0 | -1 | 流程定義ID | |
root_proc_inst_id_ | varchar | 64 | 0 | -1 | 根流程實例ID | |
proc_inst_id_ | varchar | 64 | 0 | -1 | 流程實例ID | |
execution_id_ | varchar | 64 | 0 | -1 | 執行流ID | |
case_def_key_ | varchar | 255 | 0 | -1 | ||
case_def_id_ | varchar | 64 | 0 | -1 | ||
case_inst_id_ | varchar | 64 | 0 | -1 | ||
case_execution_id_ | varchar | 64 | 0 | -1 | ||
act_inst_id_ | varchar | 64 | 0 | -1 | 節點實例ID | |
name_ | varchar | 255 | 0 | -1 | 任務名稱 | |
parent_task_id_ | varchar | 64 | 0 | -1 | 父任務ID | |
description_ | varchar | 4000 | 0 | -1 | 描述 | |
owner_ | varchar | 255 | 0 | -1 | ||
assignee_ | varchar | 255 | 0 | -1 | 代理人 | |
start_time_ | timestamp | 6 | 0 | 0 | 開始時間 | |
end_time_ | timestamp | 6 | 0 | -1 | 結束時間 | |
duration_ | int8 | 64 | 0 | -1 | 持續時間 | |
delete_reason_ | varchar | 4000 | 0 | -1 | 刪除原因 | |
priority_ | int4 | 32 | 0 | -1 | 優先權 | |
due_date_ | timestamp | 6 | 0 | -1 | 到期時間 | |
follow_up_date_ | timestamp | 6 | 0 | -1 | 跟催日期 | |
tenant_id_ | varchar | 64 | 0 | -1 | 租戶ID | |
removal_time_ | timestamp | 6 | 0 | -1 | 移除時間 |
act_hi_actinst 歷史節點(行爲)表
名 | 類型 | 長度 | 小數點 | 不是null | 鍵 | 註釋 |
---|---|---|---|---|---|---|
id_ | varchar | 64 | 0 | 0 | TRUE | 歷史流程節點實例ID |
parent_act_inst_id_ | varchar | 64 | 0 | -1 | 父流程節點實例ID | |
proc_def_key_ | varchar | 255 | 0 | -1 | 流程定義KEY | |
proc_def_id_ | varchar | 64 | 0 | 0 | 流程定義ID | |
root_proc_inst_id_ | varchar | 64 | 0 | -1 | 根流程實例ID | |
proc_inst_id_ | varchar | 64 | 0 | 0 | 流程實例ID | |
execution_id_ | varchar | 64 | 0 | 0 | 執行流ID | |
act_id_ | varchar | 255 | 0 | 0 | 節點ID | |
task_id_ | varchar | 64 | 0 | -1 | 任務ID | |
call_proc_inst_id_ | varchar | 64 | 0 | -1 | ||
call_case_inst_id_ | varchar | 64 | 0 | -1 | ||
act_name_ | varchar | 255 | 0 | -1 | 節點名稱 | |
act_type_ | varchar | 255 | 0 | -1 | 節點類型 | |
assignee_ | varchar | 64 | 0 | -1 | 代理人ID | |
start_time_ | timestamp | 6 | 0 | 0 | 開始時間 | |
end_time_ | timestamp | 6 | 0 | -1 | 結束時間 | |
duration_ | int8 | 64 | 0 | -1 | 持續時間 | |
act_inst_state_ | int4 | 32 | 0 | -1 | 節點實例狀態 | |
sequence_counter_ | int8 | 64 | 0 | -1 | 順序計數器 | |
tenant_id_ | varchar | 64 | 0 | -1 | 租戶ID | |
removal_time_ | timestamp | 6 | 0 | -1 | 去除時間 |
act_hi_attachment 歷史附件表
名 | 類型 | 長度 | 小數點 | 不是null | 鍵 | 註釋 |
---|---|---|---|---|---|---|
id_ | varchar | 64 | 0 | 0 | TRUE | 附件ID |
rev_ | int4 | 32 | 0 | -1 | 版本 | |
user_id_ | varchar | 255 | 0 | -1 | 用戶ID | |
name_ | varchar | 255 | 0 | -1 | 附件名稱 | |
description_ | varchar | 4000 | 0 | -1 | 附件描述 | |
type_ | varchar | 255 | 0 | -1 | 附件類型 | |
task_id_ | varchar | 64 | 0 | -1 | 任務ID | |
root_proc_inst_id_ | varchar | 64 | 0 | -1 | 根流程實例ID | |
proc_inst_id_ | varchar | 64 | 0 | -1 | 流程實例ID | |
url_ | varchar | 4000 | 0 | -1 | 附件路徑 | |
content_id_ | varchar | 64 | 0 | -1 | 附件內容ID | |
tenant_id_ | varchar | 64 | 0 | -1 | 租戶ID | |
create_time_ | timestamp | 6 | 0 | -1 | 創建時間 | |
removal_time_ | timestamp | 6 | 0 | -1 | 移除時間 |
act_hi_comment 歷史意見表
名 | 類型 | 長度 | 小數點 | 不是null | 鍵 | 註釋 |
---|---|---|---|---|---|---|
id_ | varchar | 64 | 0 | 0 | TRUE | 評論表ID |
type_ | varchar | 255 | 0 | -1 | 數據類型(任務事件記錄:event;任務評論:comment) | |
time_ | timestamp | 6 | 0 | 0 | 數據產生時間 | |
user_id_ | varchar | 255 | 0 | -1 | 產生此數據用戶ID | |
task_id_ | varchar | 64 | 0 | -1 | 任務ID | |
root_proc_inst_id_ | varchar | 64 | 0 | -1 | 根流程實例ID | |
proc_inst_id_ | varchar | 64 | 0 | -1 | 流程實例ID | |
action_ | varchar | 255 | 0 | -1 | 該數據的操作標識 | |
message_ | varchar | 4000 | 0 | -1 | 該評論(或者事件記錄)數據的信息(文本) | |
full_msg_ | bytea | 0 | 0 | -1 | 該評論(或者事件記錄)數據的信息(流) | |
tenant_id_ | varchar | 64 | 0 | -1 | 租戶ID | |
removal_time_ | timestamp | 6 | 0 | -1 | 移除時間 |
除此了上述重要的表結構以外,還有很多表 act_ge_property
屬性數據表存儲整個流程引擎級別的數據、 act_hi_detail
歷史詳情表提供歷史變量查詢、 act_id_group
用戶組信息表、 act_id_user
用戶信息表、 act_id_membership
用戶與用戶組對應信息表、 act_ru_job
運行時定時任務數據表 等等。。。礙於篇幅就先只贅述這些開發中較爲常用的表,其他的數據表用到時再去看錶定義即可。
總
本篇重要的是成功啓動應用,並對 Camunda 相關表有一個初步的印象,之後用到時不至於無從下手。
下一篇會學習到,在本應用的基礎上開發一個最基本 ”流程Demo“ 的過程!
點贊+關注!評論送個人收集的Camunda學習資料+視頻!
菜鳥本菜,不吝賜教,感激不盡!