SpringBoot整合Camunda工作流

什么是工作流?

概述
工作流是將一組任務組織起來以完成某個經營過程:定義了任務的觸發順序和觸發條件,每個任務可以由一個或多個軟件系統完成,也可以由一個或一組人完成,還可以由一個或多個人與軟件系統協作完成,

BPM
BPM(Business Process Management,業務流程管理),是一套系統的管理方法論和學科。它強調以“流程”為視角來設計、執行、管理和優化企業的各種業務活動,其最終目標是提高組織效率、增強敏捷性并實現戰略目標。

BPMN
BPMN(Business Process Model and Notation,業務流程模型與標記)是一套全球通用的標準圖形符號和規范,由對象管理組織(OMG)維護。它是為 BPM 方法論中的“建模”階段服務的具體工具。BPMN2.0正式版本于2011年1月3日發布,目前常見的工作流引擎如:Activiti、Flowable、Camunda都基于 BPMN 2.0 標準。

Activiti、Flowable、Camunda有什么區別?

概述

Activiti、Flowable、Camunda都是從JBPM中誕生出來,jBPM4發展了1年出現了Activiti5,Activiti5發展了幾年后第一次分叉出現了Camunda,第二次分叉出現了Flowable。

Camunda
2013年:因團隊對 Activiti 發展方向分歧(如商業化策略),部分核心成員(包括 Tom Baeyens)離開 Alfresco,創建 Camunda,延續 Activiti 5 代碼分支,保留 PVM 架構。

Flowable
2016年:Activiti 6 開發團隊因與 Salaboy 團隊(主導 Activiti 7)理念不合,分叉 Activiti 6 代碼創建 Flowable。移除 PVM,重構引擎內核,強化異步機制和多模型支持(BPMN/CMMN/DMN)

支持的數據庫:

MySQL
Activiti 支持但未明確具體版本;Flowable 支持 5.6 和 5.7;Camunda 也支持 5.7、 8.0。

Oracle
Activiti 支持但未明確版本;Flowable 支持 10g、11g 和 12c;Camunda 支持 12c 、19c。

PostgreSQL
Activiti 支持但未明確版本;Flowable 支持 9.1、9.3、9.4、9.6 和 10.4;Camunda 支持 9.6、 10 、 11、 12、13。

SQL Server
Activiti 支持但未明確版本;Flowable 支持 2008 R2、2012、2014 和 2016;Camunda 支持2014 、 2016 、 2017、 2019。

DB2
Activiti 支持但未明確版本;Flowable 支持 9.7、10.1、10.5 和 11.1;Camunda 支持 11.1。

H2
Activiti 將其作為默認數據庫支持;Flowable 和 Camunda 均支持 1.4 版本。

MariaDB
Activiti 未明確提及是否支持;Flowable 明確不支持;Camunda 支持 10.2 和 10.3 版本。

Camunda

文檔

官網地址:https://camunda.com/
中文站點:http://camunda-cn.shaochenfeng.com/

Camunda Modele

Camunda Modeler 是Camunda 官方提供的一個流程設計器,用于編輯流程圖以及其他模型【表單】,也就是一個流程圖的繪圖工具
在這里插入圖片描述
Camunda BPM

Camunda BPM 是Camunda官方提供的一個業務流程管理平臺,用來管理,部署的流程定義、執行任務,策略等。解壓文件后,執行名為start.bat腳本,打開瀏覽器訪問http://localhost:8080/進入歡迎頁面,Camunda的管理平臺。
在這里插入圖片描述

核心表結構

ACT_GE_:表示流程通用數據,用于不同場景下。
ACT_RE_
:表示流程資源存儲,這個前綴的表包含了流程定義和流程靜態資源(圖片,規則等)。
ACT_RU_:表示流程運行時。這些運行時的表,包含流程實例,任務,變量,Job等運行中的數據。 Camunda只在流程實例執行過程中保存這些數據,在流程結束時就會刪除這些記錄, 這樣運行時表的數據量最小,可以最快運行。
ACT_ID_
:表示組織用戶信息,比如用戶,組等。
ACT_HI_*:表示流程歷史記錄。這些表包含歷史數據,比如歷史流程實例,變量,任務等。

SpringBoot整合Camunda示例

Spring Boot 版本和Camunda版本兼容

Spring Boot 版本和Camunda版本之間不匹配,會出現各種意想不到的錯誤,具體版本兼容可參照官方文檔
在這里插入圖片描述

Demo示例

相關的pom.xml中的依賴

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.mshb.workflow</groupId><artifactId>camunda-msb-demo</artifactId><version>1.0.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.2</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.camunda.bpm</groupId><artifactId>camunda-bom</artifactId><version>7.21.0</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.camunda.bpm.springboot</groupId><artifactId>camunda-bpm-spring-boot-starter-rest</artifactId></dependency><dependency><groupId>org.camunda.bpm.springboot</groupId><artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.camunda.bpm</groupId><artifactId>camunda-engine-plugin-spin</artifactId></dependency><dependency><groupId>org.camunda.spin</groupId><artifactId>camunda-spin-dataformat-all</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.2.2</version></plugin></plugins></build></project>

配置文件信息

spring.datasource.url: jdbc:h2:file:./camunda-h2-database
camunda.bpm.admin-user:id: demopassword: demo

部署流程

通過啟動類啟動,訪問http://localhost:8080/camunda/可登錄camunda控制臺界面

public void deploy() {Deployment deploy = repositoryService.createDeployment().name("發起支付流程") // 定義部署文件的名稱.addClasspathResource("payment.bpmn") // 綁定需要部署的流程文件.deploy();// 部署流程
}

啟動流程

public void startFlow() {// 創建流程變量集合Map<String, Object> variables = new HashMap<>();// 添加支付相關參數(類型自動推斷)variables.put("amount", 2999);          // 整數類型variables.put("item", "Premium Package");// 字符串類型variables.put("approved", true);        // 布爾類型// 部署流程ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("Payment-gateway", variables);if (processInstance != null) {// 部署的流程實例的相關信息System.out.println("processInstance.getId() = " + processInstance.getId());System.out.println("processInstance.getProcessDefinitionId() = " + processInstance.getProcessDefinitionId());// 驗證變量已注入(可選)Map<String, Object> actualVars = runtimeService.getVariables(processInstance.getId());System.out.println("流程變量: " + actualVars);} else {System.out.println("流程啟動失敗");}
}

查詢待辦

public void queryTask() {List<Task> list = taskService.createTaskQuery().taskAssignee("demo").list();if (list != null && !list.isEmpty()) {for (Task task : list) {System.out.println("task.getId() = " + task.getId());System.out.println("task.getAssignee() = " + task.getAssignee());}}
}

完成任務

public void completeTask() {// 根據用戶找到關聯的TaskTask task = taskService.createTaskQuery().taskAssignee("demo").singleResult();if (task != null) {// 可更新任務屬性//taskService.setAssignee(task.getId(), "new_assignee");taskService.complete(task.getId());System.out.println("任務審批完成...");}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93997.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93997.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93997.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025年09月計算機二級Java選擇題每日一練——第四期

計算機二級中選擇題是非常重要的&#xff0c;所以開始寫一個每日一題的專欄。 答案及解析將在末尾公布&#xff01; 今日主題&#xff1a;面向對象特性 1、有兩個類 A 和 B 的定義如下&#xff1a; class A{final int x10;public void show(){System.out.print(x " &quo…

《Nature》新文解讀:電化學輔助核聚變的實驗驗證與機制分析

前言一篇于2025年8月發表在《Nature》期刊上的重磅研究&#xff0c;由加拿大不列顛哥倫比亞大學&#xff08;UBC&#xff09;Curtis P. Berlinguette教授領導的跨學科團隊完成&#xff0c;首次在實驗上證實&#xff1a;通過電化學方法向鈀金屬靶中加載氘&#xff0c;可顯著提升…

【基礎-判斷】用戶在長視頻、短視頻、直播、通話、會議、拍攝類應用等場景下,可以采用懸停適配在折疊屏半折態時,上屏進行瀏覽下屏進行交互操作

用戶在長視頻、短視頻、直播、通話、會議、拍攝類應用等場景下,可以采用懸停適配在折疊屏半折態時,上屏進行瀏覽下屏進行交互操作。 解釋如下: ? 1. 懸停態適配機制的核心設計 HarmonyOS 針對折疊屏半折態(懸停態)提供了分屏交互框架,其核心邏輯是: 上屏(Upper Scre…

nodejs安裝后 使用npm 只能在cmd 里使用 ,但是不能在poowershell使用,只能用npm.cmd

nodejs安裝后 使用npm 只能在cmd 里使用 &#xff0c;但是不能在poowershell使用&#xff0c;只能用npm.cmdnodejs版本&#xff1a;22.18.0 剛安裝好nodejs&#xff0c;在 PowerShell 中無法執行 npm&#xff0c;但能執行npm.cmd&#xff0c;這通常是因為 PowerShell 的執行策略…

【鏈表 - LeetCode】2. 兩數相加

誰都逃不掉 LeetCode &#xff01;&#xff01;哈哈哈~~~ 開刷&#xff1a;&#xff09; 2025年08月22日 題目&#xff1a;2. 兩數相加 - 力扣&#xff08;LeetCode&#xff09; 知識點&#xff1a;鏈表 /*** Definition for singly-linked list.* struct ListNode {* in…

WG-Tools 在線開發者工具推薦:完全免費、無廣告干擾、無需安裝、即開即用

WG-Tools 在線開發者工具箱全面探秘: 一站式效率提升平臺前言一. WG-Tools 平臺介紹 &#x1f6e0;?平臺概覽技術架構亮點二. 功能模塊詳細介紹 &#x1f3af;&#x1f4dd; 文本處理工具 (Text Tools)1. JSON工具2. XML工具3. 文本對比4. 正則表達式工具5. Markdown編輯器6. …

四十二、【核心功能強化】用例管理與調試:批量刪除與在線請求測試

四十二、【核心功能強化】用例管理與調試:批量刪除與在線請求測試 前言 準備工作 第一部分:后端實現 1. 修改 `TestCaseViewSet` (`api/views.py`) 2. 后端 API 權限: 第二部分:前端實現 1. 更新 `api/testcase.ts` API 服務 2. 改造 `TestCaseListView.vue` (用例列表頁面…

從H.264到AV1:音視頻技術演進與模塊化SDK架構全解析

引言 過去二十年&#xff0c;音視頻技術經歷了從 文件點播 → 流媒體 → 實時直播 → 互動協作 的深刻演變。早期的視頻更多停留在娛樂與媒體分發層面&#xff0c;而如今&#xff0c;它已經成為數字化社會的“實時交互基座”。從 安防監控的秒級告警、工業巡檢的遠程操作&…

Kubernetes 調度器 詳解

1. 調度器在 K8s 中的位置與核心流程API Server ←→ etcd ←→ kube-scheduler ←→ kubelet創建&#xff1a;用戶提交 Pod 描述&#xff08;YAML/Helm/Operator&#xff09;。監聽&#xff1a;調度器通過 Watch 機制捕獲到 spec.nodeName"" 的 Pod。過濾&#xff1…

51.Seata-TCC模式

前面兩種XA模式和TA模式,都是用了加鎖。 TCC模式則不會加鎖,性能更好。 TCC模式跟AT模式非常相似, 1.AT模式下,第一階段直接提交事務。 2.TCC模式下,第一階段不是提交事務,而是資源的預留凍結。 不同的是二階段TCC通過人工編碼來實現數據恢復。 需要實現三個方法 …

什么是數據分類分級?數據分類分級技術實現路徑及產品推薦

什么是數據分類分級&#xff1f; 數據分類分級是指按照一定的原則、方法和標準&#xff0c;對數據進行系統化的類別劃分和級別確定。具體而言&#xff0c;數據分類是依據數據的屬性、特征、來源、用途等維度&#xff0c;將數據劃分為不同的類別&#xff0c;如按照業務領域可分為…

深度學習——神經網絡

在當今人工智能蓬勃發展的時代&#xff0c;深度學習和神經網絡已經成為最受關注的技術領域之一。從智能手機的人臉識別到自動駕駛汽車的環境感知&#xff0c;從醫療影像分析到金融風險預測&#xff0c;這些技術正在深刻改變我們的生活和工作方式。本文將帶您了解深度學習和神經…

uniapp image標簽展示視頻第一幀

?vframe/jpg/offset/1/ 加到視頻后面獲取第一幀圖片 ?vframe/jpg/offset/1/w/400/h/300 設置寬高 ?imageView2/0/w/2000/interlace/1 設置圖片分辨率 2000 // 后面的 /1/ 是第幾幀 <image class"thumb" :src"videoUrl?vframe/jpg/offset/1/" mode…

前端本地模糊搜索1.0 按照匹配位置加權

需求背景 公司項目為Saas ERP系統&#xff0c;客戶需要快速開單需要避免接口帶來的延遲問題。所以需要將商品數據保存在本地。所以本地搜索 權重 這一套組合拳需要前端自己實現。 搜索示例 示例1&#xff1a;輸入&#xff1a;"男士真皮錢包"進行模糊匹配優先匹配完全…

Linux學習-網絡編程2

1.tcp可能出現粘包解決&#xff1a;要讓消息之間有邊界1.結束標志 \r\n2.固定長度3.協議結構體2.recv和sendrecv原型&#xff1a;ssize_t recv(int sockfd, void *buf, size_t len, int flags); 功能&#xff1a;從sockfd接收信息 參數&#xff1a;sockfd&#xff1a;要…

【普通地質學】構造運動與地質構造

名詞解釋走向&#xff1a;傾斜的層面與水平面的交線走向線&#xff0c;走向線兩端延伸的方向即為走向&#xff1b;構造運動&#xff1a;由于地球內部動力引起的組成巖石圈物質的機械運動&#xff0c;也可稱地殼運動或巖石圈運動&#xff1b;按方向分為垂直運動和水平運動&#…

基于Python的旅游推薦系統 Python+Django+Vue.js

本文項目編號 25009 &#xff0c;文末自助獲取源碼 \color{red}{25009&#xff0c;文末自助獲取源碼} 25009&#xff0c;文末自助獲取源碼 目錄 一、系統介紹1.1 用戶功能描述1.2 管理員功能描述 二、系統錄屏三、啟動教程四、功能截圖五、文案資料5.1 選題背景5.2 國內外研究…

基于51單片機的智能加濕器設計 溫濕度水位防干燒手動自動聲光報警

1 系統功能介紹 本設計實現了一種 基于 51 單片機的智能加濕器控制系統。隨著現代生活水平的提高&#xff0c;人們對居住和辦公環境的舒適度要求越來越高&#xff0c;空氣濕度和溫度的調節逐漸成為家庭和辦公自動化的重要組成部分。傳統加濕器僅能實現簡單的加濕功能&#xff0…

開發避坑指南(31):Oracle 11g LISTAGG函數使用陷阱,缺失WITHIN子句解決方案

錯誤信息 Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-02000: 缺失 WITHIN 關鍵字查詢語句 使用LISTAGG函數將多行數據合并為單行字符串&#xff0c;如下&#xff1a; selectt.order_no as orderNo,t.account_no,(select listagg(a.bank_name,,) …

【虛擬化】磁盤置備方式的性能損耗對比

【虛擬化】磁盤置備方式的性能損耗對比摘要1、定義1.1厚置備&#xff08;Thick Provisioning&#xff09;1.2厚置備延遲置零&#xff08;Thick Provisioned Lazy Zeroed&#xff09;1.3厚置備置零&#xff08;Thick Provisioned Eager Zeroed&#xff09;2、對比摘要 探索三種…