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: demo
  password: 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() {
    // 根据用户找到关联的Task
    Task task = taskService.createTaskQuery()
            .taskAssignee("demo")
            .singleResult();
    if (task != null) {
        // 可更新任务属性
        //taskService.setAssignee(task.getId(), "new_assignee");
        taskService.complete(task.getId());
        System.out.println("任务审批完成...");
    }
}
<think>好的,我需要回答用户关于在Spring Boot项目中部署Camunda工作流引擎的问题。首先,我要根据用户提供的引用内容来整合信息,确保回答准确。用户提到参考了三个引用,其中引用[1]和[3]都提到了环境准备和集成步骤,引用[2]涉及安装和集成到SpringCloud项目。 首先,我应该按照步骤结构来组织回答,比如环境准备、依赖添加、配置、流程建模、部署与测试等。需要确保每个步骤都有明确的指导,比如具体的Maven依赖和配置示例。同时,用户要求使用中文,并且数学公式要用$...$格式,不过这个问题可能不涉及数学公式,但如果有变量或代码,需要正确格式化。 接下来,检查是否有需要补充的内容。例如,Camunda Modeler的使用、流程定义文件的位置、如何访问管理界面等。引用[3]提到了使用Camunda Modeler设计流程,并展示了部署后的界面,这部分需要包含在回答中。 还要注意引用标识的添加,每个步骤末尾如果有对应的引用,需要自然地添加[^1]、[^2]或[^3]。例如,在环境准备部分,引用[1]和[3]都有提到,所以可能需要同时标注两者。 另外,用户要求生成相关问题,我需要根据内容提出三个相关的问题,比如性能调优、与SpringCloud集成、流程设计工具等。 最后,确保代码块使用正确的格式,例如配置文件的代码和流程部署的代码示例,用反引号包裹,并指定语言类型如yaml或java。同时,避免使用Markdown格式,所以需要调整成用户指定的格式,但用户示例中代码块是允许的,所以没问题。 总结步骤: 1. 环境准备:JDK、Maven、IDE、Camunda Modeler。 2. 添加Maven依赖:camunda-spring-boot-starter。 3. 配置数据库和应用属性。 4. 流程建模:使用Camunda Modeler创建BPMN文件。 5. 部署流程:自动部署或通过RepositoryService。 6. 测试验证:访问Camunda管理界面,启动流程实例。 7. 添加引用标识到每个相关部分。 8. 生成相关问题,如优化配置、界面定制、高可用部署。 需要确认所有步骤是否覆盖了用户引用的内容,并确保没有遗漏关键点,比如自动部署的路径配置和RepositoryService的使用方法。可能还需要提到如何访问REST API或进行监控,但引用中没有详细说明,所以暂时不深入。保持回答简洁明了,步骤清晰,用户能按照指导一步步完成集成。</think>### Spring Boot集成Camunda工作流引擎最佳实践 #### 一、环境准备 1. 确保JDK 1.8+、Maven 3.6+、IDE(推荐IntelliJ IDEA)已安装 2. 下载Camunda Modeler(用于设计BPMN流程图) 3. 创建Spring Boot项目(版本建议2.7.x+) #### 二、添加依赖 ```xml <!-- pom.xml --> <dependency> <groupId>org.camunda.bpm.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter</artifactId> <version>7.18.0</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> # 示例使用H2内存数据库[^1] ``` #### 三、配置参数 ```yaml # application.yml camunda: bpm: admin-user: id: admin password: admin filter: create: All tasks auto-deployment-enabled: true # 启用自动部署流程文件 spring: datasource: url: jdbc:h2:mem:camunda driverClassName: org.h2.Driver ``` #### 四、流程建模 1. 使用Camunda Modeler创建.bpmn文件 2. 将文件保存到`src/main/resources/processes/`目录 3. 示例请假流程包含:`StartEvent -> UserTask(审批) -> EndEvent` #### 五、部署与验证 1. **自动部署**:Spring Boot启动时会自动部署resources/processes下的流程文件 2. **手动部署**(可选): ```java @Autowired private RepositoryService repositoryService; public void deployProcess() { repositoryService.createDeployment() .addClasspathResource("processes/leave-request.bpmn") .deploy(); } ``` #### 六、访问管理界面 1. 启动应用后访问`http://localhost:8080/camunda/app` 2. 使用配置的admin/admin登录 3. 在**Deployments**选项卡查看已部署流程 #### 七、流程测试 ```java @Autowired private RuntimeService runtimeService; public void startProcess() { Map<String, Object> variables = new HashMap<>(); variables.put("applicant", "张三"); ProcessInstance instance = runtimeService .startProcessInstanceByKey("LeaveRequest", variables); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值