SpringBoot 集成 Camunda 流程引擎,实现一套完整的业务流程

作者:微信小助手

发布时间:2023-06-25T18:05:49

前言

项目中需要用到工作流引擎来设计部分业务流程,框架选型最终选择了 Camunda7,关于 Camunda以及 Activity 等其他工作流 引擎的介绍及对比不再介绍,这里只介绍与现有Springboot项目的集成以及具体使用及配置

概念

  • 流程(PROCESS): 通过工具建模最终生成的BPMN文件,里面有整个流程的定义

  • 流程实例(Instance):流程启动后的实例

  • 流程变量(Variables):流程任务之间传递的参数

  • 任务(TASK):流程中定义的每一个节点

  • 流程部署:将之前流程定义的.bpmn文件部署到工作流平台

核心组件

  • Process Engine-流程引擎

  • Web Applicatons- 基于web的管理页面

API介绍

官方文档

  • https://docs.camunda.org/manual/7.18/user-guide/process-engine/process-engine-api/

下面是官网的一些文档,有时间可以看看,下面说一些核心的东西。

ProcessEngine

为流程引擎,可以通过他获取相关service,里面集成了很多相关service,默认实现如下:

RepositoryService

此服务提供用于管理和操作部署和流程定义的操作,使用camunda的第一要务

RuntimeService

运行相关,启动流程实例、删除、搜索等

TaskService

所有围绕任务相关的操作,如完成、分发、认领等

HistoryService

提供引擎搜集的历史数据服务

IdentityService

用户相关,实际中用不太到

Springboot集成

依赖集成

maven

  • https://mvnrepository.com/search?q=org.camunda.bpm.springboot

可以根据需要引用版本,我这边用的是 7.18

需要3个maven依赖,分别是对应 流程引擎、Web管理平台、提供rest api操作接口包

<dependency>
    <groupId>org.camunda.bpm.springboot</groupId>
    <artifactId>camunda-bpm-spring-boot-starter</artifactId>
    <version>7.18.0</version>
</dependency>
<dependency>
    <groupId>org.camunda.bpm.springboot</groupId>
    <artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
    <version>7.18.0</version>
</dependency>
<dependency>
    <groupId>org.camunda.bpm.springboot</groupId>
    <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
    <version>7.18.0</version>
</dependency>

数据库

我这边使用的是mysql,建了个新库 camunda(可自定义),启动后会自动生成所需表结构

POM文件

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>camunda-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>camunda-demo</name>
    <description>camunda-demo</description>
 
    <properties>
        <java.version>17</java.version>
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.camunda.bpm.springboot</groupId>
            <artifactId>camunda-bpm-spring-boot-starter</artifactId>
            <version>7.18.0</version>
        </dependency>
        <dependency>
            <groupId>org.camunda.bpm.springboot</groupId>
            <artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
            <version>7.18.0</version>
        </dependency>
        <dependency>
            <groupId>org.camunda.bpm.springboot</groupId>
            <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
            <version>7.18.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.32</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
 
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>

application.yml

server:
  port: 8081
 
 
# camunda登录信息配置
camunda.bpm:
  admin-user:
    id: admin  #用户名
    password: 123456  #密码
    firstName: yu
  filter:
    create: All tasks
 
# mysql连接信息
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:8101/camunda
    username: root
    password: 123456
    type: com.mysql.cj.jdbc.MysqlDataSource

启动效果

准备好前置工作,启动后效果如下:

数据库表结构

启动后自动生成的表结构如下

大概有这么几个表模块,重要的详细介绍下:

  • ACT_ID_

这部分表示用户模块,配置文件里面的用户,信息就在此模块

  • ACT_HI_

表示流程历史记录

  • act_hi_actinst: 执行的活动历史

  • act_hi_taskinst:执行任务历史

  • act_hi_procinst:执行流程实例历史

  • act_hi_varinst:流程变量历史表

  • ACT_RE_

表示流程资源存储

  • act_re_procdef:流程定义存储

  • act_re_deployment: 自动部署,springboot每次启动都会重新部署,生成记录

  • ACT_RU_

表示流程运行时表数据,流程结束后会删除

  • act_ru_execution:运行时流程实例

  • act_ru_task:运行时的任务

  • act_ru_variable:运行时的流程变量

  • ACT_GE_

流程通用数据

  • act_ge_bytearray:每次部署的文件2进制数据,所以如果文件修改后,重启也没用,因为重新生成了记录,需要清掉数据库,或者这个表记录

登录界面

登录地址为