傳統硬編碼流程的弊端:業務屬性與流程屬性混雜、流程邏輯與業務邏輯耦合、流程變更需修改代碼重新部署。Activiti 作為 Apache 許可的開源 BPM 平台,將流程定義外部化(BPMN 2.0),實現流程與業務解耦。
| 類名 | 職責 | 關鍵配置 |
|---|---|---|
ProcessEngineConfiguration |
流程引擎配置對象 | 數據源、事務管理、建表策略、郵件服務器等 |
ProcessEngine |
流程引擎核心入口 | 獲取各 Service、校驗配置、管理服務生命周期 |
DeploymentBuilder、ProcessDefinitionProcessInstance、ExecutionTask(ACT_RU_TASK 表數據)ProcessInstance (流程實例)
└─ Execution (執行對象/令牌) ── ActivityImpl (活動節點)
├─ 可並行分支(多 Execution)
└─ Task (用戶任務) ── 身份鏈接
PARENT_ID_=NULL 記錄repositoryService.createDeployment()
.addClasspathResource("processes/leave.bpmn20.xml")
.addClasspathResource("processes/leave.png")
.name("請假流程 v1.0")
.deploy();
ProcessInstance pi = runtimeService.startProcessInstanceByKey(
"leaveProcess",
"businessKey_123", // 關聯業務表主鍵
variables);
// 簽收
taskService.claim(taskId, userId);
// 完成並攜帶變量
taskService.complete(taskId, Map.of("approved", true, "comment", "同意"));
TaskListener + 表達式 ${userService.findApprover(execution)}RuntimeService.createChangeActivityStateBuilder() 實現節點跳轉/回退TenantIdProviderActivitiEventListener 監聽流程/任務/變量事件掌握 Activiti 核心類體系,是構建靈活、可維護工作流應用的基礎。建議配合 act-*.sql 腳本深入理解 23 張核心表結構,事半功倍。