Camunda工作流引擎 I

实习工作中需要用到工作流引擎,去实现业务审批流的功能模块,由于 Flowable 不支持 MariaDB (重要原因之一),所以项目中选择了 Camunda 工作流引擎。

由于没有接触过工作流引擎,所以打算借此机会详细记录一下这个从 0 到 1 到学习过程。

本篇直接从应用开始,通过切实的使用感受来达到由浅入深的效果。

Camunda 官网文档: https://docs.camunda.org/get-started/spring-boot/project-setup/

网上关于 Camunda 的中文学习资料少之又少,但是可以先学习 Activiti(教程比较多),曲线学习 Camunda。

关于工作流的一些概念和术语就不再本篇的范围了(网上很多)。

启动 Camunda

创建一个 SpringBoot 项目除了要用到的 ORM框架、数据库驱动等等,还要导入 Camunda 相关依赖:

<!-- https://mvnrepository.com/artifact/org.camunda.bpm.springboot/camunda-bpm-spring-boot-starter-webapp -->
<dependency>
    <groupId>org.camunda.bpm.springboot</groupId>
    <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
    <version>3.4.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.camunda.bpm.springboot/camunda-bpm-spring-boot-starter-rest -->
<dependency>
    <groupId>org.camunda.bpm.springboot</groupId>
    <artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
    <version>3.4.4</version>
</dependency>

application.yml 部分配置:

spring:
  application:
    name: camunda-demo
  jackson:
    #设置返回前端的参数为驼峰的转换形式
    property-naming-strategy: SNAKE_CASE
    #日期格式化
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
 #数据源配置
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/camunda?serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 1234

mybatis:
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

camunda:
  bpm:
    #配置账户密码来访问Camunda自带的管理界面
    admin-user:
      id: admin
      password: admin
      first-name: admin
    filter:
      create: All tasks
    #指定数据库类型
#    database:
#      type: mysql
    #禁止自动部署resources下面的bpmn文件
    auto-deployment-enabled: false
    #禁止index跳转到Camunda自带的管理界面,默认true
#    webapp:
#      index-redirect-enabled: false

启动应用,访问 http://localhost:8080 (或者其他端口) 就可以看到管理界面,使用配置的账户密码登录:

在这里插入图片描述

到这里就算是踏出了重要的第一步!

相关表结构介绍

在成功启动 Camunda 之后,可以到数据库中看到其自动创建的 47 张表,之后每条流程实例的相关信息就会存放到这些表中!

在这里插入图片描述

act_ge_bytearray 资源(二进制数据)表

列名 类型 长度 小数点 不是null 主键 注释
id_ varchar 64 0 0 TRUE 资源ID
rev_ int4 32 0 -1 版本
name_ varchar 255 0 -1 资源名称
deployment_id_ varchar 64 0 -1 部署ID
bytes_ bytea 0 0 -1 文件内容
generated_ bool 0 0 -1
tenant_id_ varchar 64 0 -1 租户ID
type_ int4 32 0 -1 文件类型
create_time_ timestamp 6 0 -1 创建时间
root_proc_inst_id_ varchar 64 0 -1 根流程实例ID
removal_time_ timestamp 6 0 -1 调动时间

act_re_deployment 流程部署表

列名 类型 长度 小数点 不是null 主键 注释
id_ varchar 64 0 0 TRUE 部署ID
name_ varchar 255 0 -1 部署名称
deploy_time_ timestamp 6 0 -1 部署时间
source_ varchar 255 0 -1 资源
tenant_id_ varchar 64 0 -1 租户ID

act_re_procdef 流程定义表

列名 类型 长度 小数点 不是null 主键 注释
id_ varchar 64 0 0 TRUE 流程定义ID
rev_ int4 32 0 -1 流程定义版本(同一个流程同一个标识)
category_ varchar 255 0 -1 流程定义分类
name_ varchar 255 0 -1 流程定义名称
key_ varchar 255 0 0 流程定义KEY
version_ int4 32 0 0 流程定义版本(同一个流程不同的版本)
deployment_id_ varchar 64 0 -1 流程部署ID
resource_name_ varchar 4000 0 -1 资源名称
dgrm_resource_name_ varchar 4000 0 -1 流程图资源名称
has_start_form_key_ bool 0 0 -1 是否包含启动表单KEY(t:true;f:false)
suspension_state_ int4 32 0 -1 流程定义状态(激活:1/挂起:2)
tenant_id_ varchar 64 0 -1 租户ID
version_tag_ varchar 64 0 -1 版本标签
history_ttl_ int4 32 0 -1
startable_ bool 0 0 0

act_ru_execution 运行时流程实例(执行流)表

类型 长度 小数点 不是null 注释
id_ varchar 64 0 0 TRUE 执行流ID
rev_ int4 32 0 -1 版本
root_proc_inst_id_ varchar 64 0 -1 根流程实例ID
proc_inst_id_ varchar 64 0 -1 流程实例ID
business_key_ varchar 255 0 -1 业务KEY
parent_id_ varchar 64 0 -1 父ID
proc_def_id_ varchar 64 0 -1 流程定义ID
super_exec_ varchar 64 0 -1
super_case_exec_ varchar 64 0 -1
case_inst_id_ varchar 64 0 -1
act_id_ varchar 255 0 -1 节点定义ID
act_inst_id_ varchar 64 0 -1 节点实例ID
is_active_ bool 0 0 -1 是否可执行状态
is_concurrent_ bool 0 0 -1
is_scope_ bool 0 0 -1
is_event_scope_ bool 0 0 -1
suspension_state_ int4 32 0 -1 实例状态(激活:1;挂起:2)
cached_ent_state_ int4 32 0 -1
sequence_counter_ int8 64 0 -1 顺序计数器
tenant_id_ varchar 64 0 -1 租户ID

act_ru_identitylink 流程与身份关系表(执行流)

运行时流程人员表,主要存储任务节点和参与者的相关信息。还有与其相对的 act_hi_identitylink 历史流程人员表。

类型 长度 小数点 不是null 注释
id_ varchar 64 0 0 TRUE 任务参与ID
rev_ int4 32 0 -1 版本
group_id_ varchar 255 0 -1 角色/组ID
type_ varchar 255 0 -1 类型(候选人:candidate;代理人:delegation)
user_id_ varchar 255 0 -1 用户ID
task_id_ varchar 64 0 -1 任务ID
proc_def_id_ varchar 64 0 -1 流程定义ID
tenant_id_ varchar 64 0 -1 租户ID

act_ru_task 运行时流程任务(节点)表(执行流)

类型 长度 小数点 不是null 注释
id_ varchar 64 0 0 TRUE 执行任务ID
rev_ int4 32 0 -1 版本
execution_id_ varchar 64 0 -1 执行ID
proc_inst_id_ varchar 64 0 -1 流程实例ID
proc_def_id_ varchar 64 0 -1 流程定义ID
case_execution_id_ varchar 64 0 -1
case_inst_id_ varchar 64 0 -1
case_def_id_ varchar 64 0 -1
name_ varchar 255 0 -1 执行任务名称
parent_task_id_ varchar 64 0 -1 父级任务ID
description_ varchar 4000 0 -1 任务描述
task_def_key_ varchar 255 0 -1 任务定义KEY
owner_ varchar 255 0 -1
assignee_ varchar 255 0 -1 签收人ID
delegation_ varchar 64 0 -1 委托人ID
priority_ int4 32 0 -1 优先权
create_time_ timestamp 6 0 -1 创建时间
due_date_ timestamp 6 0 -1 到期时间
follow_up_date_ timestamp 6 0 -1 跟催时间
suspension_state_ int4 32 0 -1 流程状态(激活:1;挂起:2)
tenant_id_ varchar 64 0 -1 租户ID

act_ru_variable 运行时流程参数(变量)表(执行流)

还有与其相对的 act_hi_varinst 历史变量表。

类型 长度 小数点 不是null 注释
id_ varchar 64 0 0 TRUE 运行变量ID
rev_ int4 32 0 -1 版本
type_ varchar 255 0 0 变量类型
name_ varchar 255 0 0 变量名称
execution_id_ varchar 64 0 -1 执行流ID
proc_inst_id_ varchar 64 0 -1 流程实例ID
case_execution_id_ varchar 64 0 -1
case_inst_id_ varchar 64 0 -1
task_id_ varchar 64 0 -1 任务ID
bytearray_id_ varchar 64 0 -1
double_ float8 53 0 -1
long_ int8 64 0 -1
text_ varchar 4000 0 -1
text2_ varchar 4000 0 -1
var_scope_ varchar 64 0 -1
sequence_counter_ int8 64 0 -1 顺序计数器
is_concurrent_local_ bool 0 0 -1
tenant_id_ varchar 64 0 -1 租户ID

act_hi_procinst 流程实例(历史)表

类型 长度 小数点 不是null 注释
id_ varchar 64 0 0 TRUE 历史流程实例ID
proc_inst_id_ varchar 64 0 0 流程实例ID
business_key_ varchar 255 0 -1 业务KEY
proc_def_key_ varchar 255 0 -1 流程定义KEY
proc_def_id_ varchar 64 0 0 流程定义ID
start_time_ timestamp 6 0 0 开始时间
end_time_ timestamp 6 0 -1 结束时间
removal_time_ timestamp 6 0 -1 移除时间
duration_ int8 64 0 -1 持续时间
start_user_id_ varchar 255 0 -1 发起人
start_act_id_ varchar 255 0 -1 发起节点ID
end_act_id_ varchar 255 0 -1 结束节点ID
super_process_instance_id_ varchar 64 0 -1 顶级流程实例ID
root_proc_inst_id_ varchar 64 0 -1 根流程实例ID
super_case_instance_id_ varchar 64 0 -1
case_inst_id_ varchar 64 0 -1
delete_reason_ varchar 4000 0 -1 删除原因
tenant_id_ varchar 64 0 -1 租户ID
state_ varchar 255 0 -1 状态

act_hi_detail 流程明细(历史)表

类型 长度 小数点 不是null 注释
id_ varchar 64 0 0 TRUE 历史流程明细ID
type_ varchar 255 0 0 类型
proc_def_key_ varchar 255 0 -1 流程定义KEY
proc_def_id_ varchar 64 0 -1 流程定义ID
root_proc_inst_id_ varchar 64 0 -1 根流程实例ID
proc_inst_id_ varchar 64 0 -1 流程实例ID
execution_id_ varchar 64 0 -1 执行流ID
case_def_key_ varchar 255 0 -1
case_def_id_ varchar 64 0 -1
case_inst_id_ varchar 64 0 -1
case_execution_id_ varchar 64 0 -1
task_id_ varchar 64 0 -1 任务ID
act_inst_id_ varchar 64 0 -1 节点实例ID
var_inst_id_ varchar 64 0 -1 参数实例ID
name_ varchar 255 0 0 参数名称
var_type_ varchar 64 0 -1 参数类型
rev_ int4 32 0 -1 版本
time_ timestamp 6 0 0 时间
bytearray_id_ varchar 64 0 -1 流数组ID
double_ float8 53 0 -1
long_ int8 64 0 -1
text_ varchar 4000 0 -1
text2_ varchar 4000 0 -1
sequence_counter_ int8 64 0 -1 顺序计数器
tenant_id_ varchar 64 0 -1 租户ID
operation_id_ varchar 64 0 -1 操作ID
removal_time_ timestamp 6 0 -1 移除时间

act_hi_taskinst 历史任务实例表

类型 长度 小数点 不是null 注释
id_ varchar 64 0 0 TRUE 历史任务实例表ID
task_def_key_ varchar 255 0 -1 任务定义KEY
proc_def_key_ varchar 255 0 -1 流程定义KEY
proc_def_id_ varchar 64 0 -1 流程定义ID
root_proc_inst_id_ varchar 64 0 -1 根流程实例ID
proc_inst_id_ varchar 64 0 -1 流程实例ID
execution_id_ varchar 64 0 -1 执行流ID
case_def_key_ varchar 255 0 -1
case_def_id_ varchar 64 0 -1
case_inst_id_ varchar 64 0 -1
case_execution_id_ varchar 64 0 -1
act_inst_id_ varchar 64 0 -1 节点实例ID
name_ varchar 255 0 -1 任务名称
parent_task_id_ varchar 64 0 -1 父任务ID
description_ varchar 4000 0 -1 描述
owner_ varchar 255 0 -1
assignee_ varchar 255 0 -1 代理人
start_time_ timestamp 6 0 0 开始时间
end_time_ timestamp 6 0 -1 结束时间
duration_ int8 64 0 -1 持续时间
delete_reason_ varchar 4000 0 -1 删除原因
priority_ int4 32 0 -1 优先权
due_date_ timestamp 6 0 -1 到期时间
follow_up_date_ timestamp 6 0 -1 跟催日期
tenant_id_ varchar 64 0 -1 租户ID
removal_time_ timestamp 6 0 -1 移除时间

act_hi_actinst 历史节点(行为)表

类型 长度 小数点 不是null 注释
id_ varchar 64 0 0 TRUE 历史流程节点实例ID
parent_act_inst_id_ varchar 64 0 -1 父流程节点实例ID
proc_def_key_ varchar 255 0 -1 流程定义KEY
proc_def_id_ varchar 64 0 0 流程定义ID
root_proc_inst_id_ varchar 64 0 -1 根流程实例ID
proc_inst_id_ varchar 64 0 0 流程实例ID
execution_id_ varchar 64 0 0 执行流ID
act_id_ varchar 255 0 0 节点ID
task_id_ varchar 64 0 -1 任务ID
call_proc_inst_id_ varchar 64 0 -1
call_case_inst_id_ varchar 64 0 -1
act_name_ varchar 255 0 -1 节点名称
act_type_ varchar 255 0 -1 节点类型
assignee_ varchar 64 0 -1 代理人ID
start_time_ timestamp 6 0 0 开始时间
end_time_ timestamp 6 0 -1 结束时间
duration_ int8 64 0 -1 持续时间
act_inst_state_ int4 32 0 -1 节点实例状态
sequence_counter_ int8 64 0 -1 顺序计数器
tenant_id_ varchar 64 0 -1 租户ID
removal_time_ timestamp 6 0 -1 去除时间

act_hi_attachment 历史附件表

类型 长度 小数点 不是null 注释
id_ varchar 64 0 0 TRUE 附件ID
rev_ int4 32 0 -1 版本
user_id_ varchar 255 0 -1 用户ID
name_ varchar 255 0 -1 附件名称
description_ varchar 4000 0 -1 附件描述
type_ varchar 255 0 -1 附件类型
task_id_ varchar 64 0 -1 任务ID
root_proc_inst_id_ varchar 64 0 -1 根流程实例ID
proc_inst_id_ varchar 64 0 -1 流程实例ID
url_ varchar 4000 0 -1 附件路径
content_id_ varchar 64 0 -1 附件内容ID
tenant_id_ varchar 64 0 -1 租户ID
create_time_ timestamp 6 0 -1 创建时间
removal_time_ timestamp 6 0 -1 移除时间

act_hi_comment 历史意见表

类型 长度 小数点 不是null 注释
id_ varchar 64 0 0 TRUE 评论表ID
type_ varchar 255 0 -1 数据类型(任务事件记录:event;任务评论:comment)
time_ timestamp 6 0 0 数据产生时间
user_id_ varchar 255 0 -1 产生此数据用户ID
task_id_ varchar 64 0 -1 任务ID
root_proc_inst_id_ varchar 64 0 -1 根流程实例ID
proc_inst_id_ varchar 64 0 -1 流程实例ID
action_ varchar 255 0 -1 该数据的操作标识
message_ varchar 4000 0 -1 该评论(或者事件记录)数据的信息(文本)
full_msg_ bytea 0 0 -1 该评论(或者事件记录)数据的信息(流)
tenant_id_ varchar 64 0 -1 租户ID
removal_time_ timestamp 6 0 -1 移除时间

除此了上述重要的表结构以外,还有很多表 act_ge_property 属性数据表存储整个流程引擎级别的数据、 act_hi_detail 历史详情表提供历史变量查询、 act_id_group 用户组信息表、 act_id_user 用户信息表、 act_id_membership 用户与用户组对应信息表、 act_ru_job 运行时定时任务数据表 等等。。。碍于篇幅就先只赘述这些开发中较为常用的表,其他的数据表用到时再去看表定义即可。

本篇重要的是成功启动应用,并对 Camunda 相关表有一个初步的印象,之后用到时不至于无从下手。

下一篇会学习到,在本应用的基础上开发一个最基本 ”流程Demo“ 的过程!

点赞+关注!评论送个人收集的Camunda学习资料+视频!


菜鸟本菜,不吝赐教,感激不尽!

更多题解源码和学习笔记:githubCSDNM1ng

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