工作流是我們開發企業應用幾乎必備的一項功能,工作流引擎發展至今已經有非常多的產品。最近正好在接觸Camunda
,所以來做個簡單的入門整合介紹。如果您也剛好在調研或者剛開始計劃接入,希望本文對您有所幫助。如果您是一名Java開發或Spring框架愛好者,歡迎關注我程序猿DD,持續非常技術乾貨。
Camunda簡介
Camunda是一個靈活的工作流和流程自動化框架。其核心是一個運行在Java虛擬機內部的原生BPMN 2.0流程引擎。它可以嵌入到任何Java應用程序和任何運行時容器中。
動手整合Camunda
下面就來一步步動手嘗試一下吧。
準備工作
- 使用Camunda提供的項目初始化工具Camunda Automation Platform 7 Initializr
如上圖,包名之類的根據自己需要做好配置,最後輸入管理賬號和密碼,點擊Generate Project
按鈕,自動下載工程。
- 解壓下載後的工程,使用IntelliJ IDEA打開,其項目結構
- 打開
pom.xml
文件,添加camunda依賴:
<dependency>
<groupId>org.camunda.connect</groupId>
<artifactId>camunda-connect-core</artifactId>
</dependency>
<dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-engine-plugin-connect</artifactId>
</dependency>
由於Camunda Automation Platform 7 Initializr默認的Spring Boot版本已經是3.1了,所以如果要做一些降級調整,可以手工修改pom.xml
中dependencyManagement
配置,比如下面這樣:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-bom</artifactId>
<version>7.15.0</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
- 打開配置文件
application.yaml
,可以看到類似下面的內容
spring.datasource.url: jdbc:h2:file:./camunda-h2-database
camunda.bpm.admin-user:
id: transduck
password: 111111
spring.datasource.url
:工作流引擎使用的數據庫配置,您也可以根據官網文檔去調整到其他數據庫中(尤其生產環境)。camunda.bpm.admin-user
:管理員賬戶配置,可以在這裏修改用戶名和密碼
創建一個簡單的工作流
下面我們嘗試創建一個簡單的工作流:
第一步,我們將請求用戶提供兩個輸入:name和message
第二步,我們將這些輸入傳遞給我們的服務以創建消息輸出
開始編碼:
- 創建第一步提到的數據模型
public class model {
private String message;
private String name;
public model() { }
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "" + message + ", " + name;
}
}
- 根據第二步,創建接收消息的接口
@RequestMapping("/")
@RestController
public class controller {
Logger logger = Logger.getLogger(this.getClass().getName());
@PostMapping("/message")
public model createMessage(@RequestBody model model) {
logger.info("-------Message Creator Initialized-------");
model m = new model();
m.setMessage(model.getMessage());
m.setName(model.getName());
logger.info("Message created --> " + m.toString());
return m;
}
}
- 下面我們可以開始創建工作流程圖。在Camunda Modeler中打開我們項目的
resources
下的process.bpmn
,我們將看到類似下面的流程圖:
圖中帶有小人的框稱爲User Tasks
,是執行與用戶相關的操作的步驟。如前面部分所述,在工作流程的第一步中,我們將請求用戶輸入兩個輸入:姓名和消息。無需添加新任務,更新現有的User Tasks
即可解決問題。單擊User Tasks
,打開屬性面板,在打開的面板中定義適合我們案例內容。
- 完成基本信息填寫後,轉到
Form
選項卡。
這是定義呈現給用戶的表單選項卡。由於我們需要用戶輸入姓名和消息,因此我們定義兩個名爲“name”和“message”的表單字段。要定義表單字段,請單擊“表單字段”旁邊的加號圖標。在打開的表單中,相應地填寫 ID、類型和標籤字段。對每個表單字段重複相同的步驟。
- 開始配置第二步,調用我們的接口。添加
Service Task
。
具體操作方法:單擊左側菜單中的Create Task
圖標,然後將任務拖放到隨機位置。單擊任務後,單擊Change Type
圖標,然後從菜單中選擇Service Task
。
- 填寫基本信息
- 切換到
Connector
選項卡。這是定義 HTTP 信息和有關服務的數據的選項卡,在這裏配置剛纔定義的接口,具體如下圖所示:
- 將
Service Task
連接到工作流程中。先刪除User Tasks
和End Event
之間的箭頭。然後,單擊User Tasks
並從菜單中選擇箭頭圖標。將箭頭連接到Service Task
。最後,再連接Service Task
和End Event
。
啓動測試
在完成了上面的編碼和工作流程配置後,我們就可以在調試模式下運行項目了。
啓動完成後,在瀏覽器上訪問地址http://localhost:8080/
,您將看到 Camunda 登錄頁面:
輸入您在application.yaml
中配置的管理員配置信息,進入後臺:
從應用程序主頁中選擇Tasklist
,可看到如下界面:
然後在任務列表頁面上單擊Add a simple filter
選項。單擊後,您將看到名爲All Tasks (0)
的過濾器已添加到列表中,繼續單擊Start process
選項來運行我們準備好的工作流程。
選擇您的工作流進程,然後單擊Start button
,無需提供任何其他信息。
最後,單擊Created
下列出的Get Input
任務。如果您沒有看到該任務,請刷新頁面。
您將看到我們在第一步中定義的表單。要填寫表格,請單擊右上角Claim
選項。然後,根據您的喜好填寫表格並單擊Complete
按鈕。
當工作流執行Service Task
並且服務運行時,您將看到列表再次變空。如果工作流成功執行了第二步,我們應該能夠在控制檯中看到輸出。
小結
本文介紹了使用Spring Boot和Camunda創建一個簡單工作流的完整步驟,希望對您有所幫助。如果您學習過程中如遇困難?可以加入我們超高質量的Spring技術交流羣,參與交流與討論,更好的學習與進步!更多Spring Boot教程可以點擊直達!,歡迎收藏與轉發支持!
歡迎關注我的公衆號:程序猿DD。第一時間瞭解前沿行業消息、分享深度技術乾貨、獲取優質學習資源