一、什麼是工作流?為什麼需要工作流引擎?
Q1:工作流解決了什麼問題?不用引擎直接寫 if-else 不行嗎?
- 痛點:
- 審批流程頻繁變更(如:3級審批 → 5級)
- 流程節點權限複雜(部門經理、HR、財務)
- 需要歷史軌跡、催辦、轉辦、撤回等能力
- 人工代碼維護成本高、易出錯
- 工作流引擎的價值:
- 流程與業務解耦:流程定義(BPMN 文件)獨立於 Java 代碼
- 可視化建模:業務人員可參與流程設計
- 內置能力:任務分配、超時處理、子流程、並行網關
- 審計追蹤:完整記錄流程執行歷史
類比:
工作流引擎 ≈ 數據庫之於文件存儲 —— 提供事務、索引、查詢等基礎設施。
二、主流工作流引擎對比
Q2:Activiti、Flowable、Camunda 有何區別?如何選型?
|
特性 |
Activiti (Alfresco) |
Flowable (Activiti 分支) |
Camunda |
|
起源 |
JBoss jBPM 衍生 |
Activiti 社區不滿後 fork |
Activiti 創始人另起爐灶 |
|
活躍度 |
低(更新慢) |
⭐⭐⭐⭐(社區活躍) |
⭐⭐⭐⭐⭐(商業+開源) |
|
BPMN 支持 |
基礎 |
完整 + CMMN/DMN |
完整 + 強大 Modeler |
|
性能 |
一般 |
優化良好 |
極致優化(輕量、高性能) |
|
微服務支持 |
弱 |
中(支持事件驅動) |
⭐⭐⭐⭐(Zeebe 子項目專為雲原生設計) |
|
推薦場景 |
老項目維護 |
新項目首選(Spring Boot 友好) |
高要求企業級/雲原生 |
現狀:
Flowable 是目前 Java 社區最推薦的開源選擇,Camunda 在金融、航空等領域有深厚積累。
三、BPMN 2.0 核心元素
Q3:BPMN 2.0 中常見的流程元素有哪些?請舉例説明。
- 核心元素:
- 開始事件(Start Event):流程起點
- 用户任務(User Task):需人工處理的節點(如“部門經理審批”)
- 服務任務(Service Task):自動執行 Java 邏輯(如“發送郵件”)
- 網關(Gateway):
- 排他網關(Exclusive):if-else 分支
- 並行網關(Parallel):fork/join 並行執行
- 結束事件(End Event):流程終點
- 子流程(Sub-Process):封裝複雜邏輯
- 示例:請假流程
[開始] → [填寫請假單] → [部門經理審批]
↓ 同意
[HR備案] → [結束]
↑ 拒絕
[通知申請人]
關鍵點:
BPMN 是標準規範,不同引擎對其支持程度略有差異。
四、流程部署與啓動
Q4:如何在 Java 中部署和啓動一個流程?
// 1. 部署 BPMN 文件
RepositoryService repositoryService = processEngine.getRepositoryService();
repositoryService.createDeployment()
.addClasspathResource("leave.bpmn20.xml")
.deploy();
// 2. 啓動流程實例
RuntimeService runtimeService = processEngine.getRuntimeService();
Map<String, Object> variables = new HashMap<>();
variables.put("applicant", "張三");
variables.put("days", 5);
ProcessInstance instance = runtimeService
.startProcessInstanceByKey("leaveProcess", variables);
- 關鍵概念:
- Deployment:流程定義的部署單元
- ProcessDefinition:流程模板(只讀)
- ProcessInstance:一次流程運行實例
- Execution:流程執行路徑(支持並行分支)