Spring Boot 整合 Camunda 實現工作流

工作流是我們開發企業應用幾乎必備的一項功能,工作流引擎發展至今已經有非常多的產品。最近正好在接觸Camunda,所以來做個簡單的入門整合介紹。如果您也剛好在調研或者剛開始計劃接入,希望本文對您有所幫助。如果您是一名Java開發或Spring框架愛好者,歡迎關注我程序猿DD,持續非常技術乾貨。

Camunda簡介

Camunda是一個靈活的工作流和流程自動化框架。其核心是一個運行在Java虛擬機內部的原生BPMN 2.0流程引擎。它可以嵌入到任何Java應用程序和任何運行時容器中。

動手整合Camunda

下面就來一步步動手嘗試一下吧。

準備工作

  1. 使用Camunda提供的項目初始化工具Camunda Automation Platform 7 Initializr

如上圖,包名之類的根據自己需要做好配置,最後輸入管理賬號和密碼,點擊Generate Project按鈕,自動下載工程。

  1. 解壓下載後的工程,使用IntelliJ IDEA打開,其項目結構

  1. 打開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.xmldependencyManagement配置,比如下面這樣:

<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>
  1. 打開配置文件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
第二步,我們將這些輸入傳遞給我們的服務以創建消息輸出

開始編碼:

  1. 創建第一步提到的數據模型
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;
    }
}
  1. 根據第二步,創建接收消息的接口
@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;
    }
}
  1. 下面我們可以開始創建工作流程圖。在Camunda Modeler中打開我們項目的resources下的process.bpmn,我們將看到類似下面的流程圖:

圖中帶有小人的框稱爲User Tasks,是執行與用戶相關的操作的步驟。如前面部分所述,在工作流程的第一步中,我們將請求用戶輸入兩個輸入:姓名和消息。無需添加新任務,更新現有的User Tasks即可解決問題。單擊User Tasks,打開屬性面板,在打開的面板中定義適合我們案例內容。

  1. 完成基本信息填寫後,轉到Form選項卡。

這是定義呈現給用戶的表單選項卡。由於我們需要用戶輸入姓名和消息,因此我們定義兩個名爲“name”和“message”的表單字段。要定義表單字段,請單擊“表單字段”旁邊的加號圖標。在打開的表單中,相應地填寫 ID、類型和標籤字段。對每個表單字段重複相同的步驟。

  1. 開始配置第二步,調用我們的接口。添加Service Task

具體操作方法:單擊左側菜單中的Create Task圖標,然後將任務拖放到隨機位置。單擊任務後,單擊Change Type圖標,然後從菜單中選擇Service Task

  1. 填寫基本信息

  1. 切換到Connector選項卡。這是定義 HTTP 信息和有關服務的數據的選項卡,在這裏配置剛纔定義的接口,具體如下圖所示:

  1. Service Task連接到工作流程中。先刪除User TasksEnd Event之間的箭頭。然後,單擊User Tasks並從菜單中選擇箭頭圖標。將箭頭連接到Service Task。最後,再連接Service TaskEnd 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。第一時間瞭解前沿行業消息、分享深度技術乾貨、獲取優質學習資源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章