最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合Camunda工作流實踐

 更新時間:2025年09月08日 15:13:23   作者:劉火鍋  
工作流是任務序列的組織方式,BPMN是業(yè)務流程建模標準,Activiti、Flowable、Camunda均源自JBPM,通過分叉發(fā)展形成不同技術路線,支持多種數(shù)據(jù)庫,且可與SpringBoot集成部署流程

什么是工作流?

概述:

  • 工作流是將一組任務組織起來以完成某個經(jīng)營過程:
  • 定義了任務的觸發(fā)順序和觸發(fā)條件,每個任務可以由一個或多個軟件系統(tǒng)完成,也可以由一個或一組人完成,還可以由一個或多個人與軟件系統(tǒng)協(xié)作完成,

BPM

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

BPMN

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

Activiti、Flowable、Camunda有什么區(qū)別?

概述:

  • Activiti、Flowable、Camunda都是從JBPM中誕生出來,jBPM4發(fā)展了1年出現(xiàn)了Activiti5,Activiti5發(fā)展了幾年后第一次分叉出現(xiàn)了Camunda,第二次分叉出現(xiàn)了Flowable。

Camunda

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

Flowable

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

支持的數(shù)據(jù)庫:

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 將其作為默認數(shù)據(jù)庫支持;
  • Flowable 和 Camunda 均支持 1.4 版本。

MariaDB

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

Camunda

文檔:

Camunda Modele

  • Camunda Modeler 是Camunda 官方提供的一個流程設計器,用于編輯流程圖以及其他模型【表單】,也就是一個流程圖的繪圖工具

Camunda BPM

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

核心表結構

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

SpringBoot整合Camunda示例

Spring Boot 版本和Camunda版本兼容

Spring Boot 版本和Camunda版本之間不匹配,會出現(xiàn)各種意想不到的錯誤,具體版本兼容可參照官方文檔

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: demo
  password: demo
  • 部署流程

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

public void deploy() {
    Deployment deploy = repositoryService.createDeployment()
            .name("發(fā)起支付流程") // 定義部署文件的名稱
            .addClasspathResource("payment.bpmn") // 綁定需要部署的流程文件
            .deploy();// 部署流程
}
  • 啟動流程
public void startFlow() {
    // 創(chuàng)建流程變量集合
    Map<String, Object> variables = new HashMap<>();

    // 添加支付相關參數(shù)(類型自動推斷)
    variables.put("amount", 2999);          // 整數(shù)類型
    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() {
    // 根據(jù)用戶找到關聯(lián)的Task
    Task task = taskService.createTaskQuery()
            .taskAssignee("demo")
            .singleResult();
    if (task != null) {
        // 可更新任務屬性
        //taskService.setAssignee(task.getId(), "new_assignee");
        taskService.complete(task.getId());
        System.out.println("任務審批完成...");
    }
}

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 在springboot中攔截器Filter中注入bean失敗問題及解決

    在springboot中攔截器Filter中注入bean失敗問題及解決

    這篇文章主要介紹了在springboot中攔截器Filter中注入bean失敗問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java并發(fā)編程之詳解CyclicBarrier線程同步

    Java并發(fā)編程之詳解CyclicBarrier線程同步

    在之前的文章中已經(jīng)為大家介紹了java并發(fā)編程的工具:BlockingQueue接口,ArrayBlockingQueue,DelayQueue,LinkedBlockingQueue,PriorityBlockingQueue,SynchronousQueue,BlockingDeque接口,ConcurrentHashMap,CountDownLatch,本文為系列文章第十篇,需要的朋友可以參考下
    2021-06-06
  • java中rss解析器(rome.jar和jdom.jar)示例

    java中rss解析器(rome.jar和jdom.jar)示例

    這篇文章主要介紹了java中rss解析器(rome.jar和jdom.jar)示例,需要的朋友可以參考下
    2014-03-03
  • 解決springboot中配置過濾器以及可能出現(xiàn)的問題

    解決springboot中配置過濾器以及可能出現(xiàn)的問題

    這篇文章主要介紹了解決springboot中配置過濾器以及可能出現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Springboot 整合 Java DL4J 打造文本摘要生成系統(tǒng)

    Springboot 整合 Java DL4J 打造文本摘要生成系統(tǒng)

    本文介紹了如何使用SpringBoot整合JavaDeeplearning4j構建文本摘要生成系統(tǒng),該系統(tǒng)能夠自動從長篇文本中提取關鍵信息,生成簡潔的摘要,幫助用戶快速了解文本的主要內容,技術實現(xiàn)包括使用LSTM神經(jīng)網(wǎng)絡進行模型構建和訓練,并通過SpringBoot集成RESTfulAPI接口
    2024-11-11
  • 使用Java反射機制提高SpringBoot的代碼質量和可維護性

    使用Java反射機制提高SpringBoot的代碼質量和可維護性

    保持好的代碼質量和遵守編碼標準是開發(fā)可維護和健壯軟件的重要方面,在本文中,我們將探討如何使用 Java 反射來提高 Spring Boot 應用程序的代碼質量和可維護性,需要的朋友可以參考下
    2023-10-10
  • jdk15的安裝與配置全過程記錄

    jdk15的安裝與配置全過程記錄

    這篇文章主要給大家介紹了關于jdk15的安裝與配置,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • IDEA中設置Run Dashboard方式

    IDEA中設置Run Dashboard方式

    這篇文章主要介紹了IDEA中設置Run Dashboard方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Eclipse配置springIDE插件的方法步驟

    Eclipse配置springIDE插件的方法步驟

    本篇文章主要介紹了Eclipse配置springIDE插件的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 帶你了解Java中的異常處理(下)

    帶你了解Java中的異常處理(下)

    這篇文章主要介紹了Java中的異常處理的相關資料,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-08-08

最新評論

九龙县| 余庆县| 南雄市| 黄陵县| 黑龙江省| 云霄县| 高淳县| 五台县| 紫云| 高邑县| 兰州市| 宝丰县| 博白县| 东阳市| 游戏| 彭山县| 茶陵县| 静安区| 甘肃省| 芒康县| 靖西县| 洞头县| 华亭县| 高安市| 兴海县| 江津市| 建平县| 桃江县| 汪清县| 德庆县| 珲春市| 且末县| 黄陵县| 阿拉善盟| 孝感市| 观塘区| 阳朔县| 抚顺市| 恩施市| 昭觉县| 尉犁县|