实习工作中需要用到工作流引擎,去实现业务审批流的功能模块,由于 Flowable 不支持 MariaDB (重要原因之一),所以项目中选择了 Camunda 工作流引擎。
由于没有接触过工作流引擎,所以打算借此机会详细记录一下这个从 0 到 1 到学习过程。
本篇直接从应用开始,通过切实的使用感受来达到由浅入深的效果。
Camunda 官网文档: https://docs.camunda.org/get-started/spring-boot/project-setup/
网上关于 Camunda 的中文学习资料少之又少,但是可以先学习 Activiti(教程比较多),曲线学习 Camunda。
关于工作流的一些概念和术语就不再本篇的范围了(网上很多)。
启动 Camunda
创建一个 SpringBoot 项目除了要用到的 ORM框架、数据库驱动等等,还要导入 Camunda 相关依赖:
1 | <!-- https://mvnrepository.com/artifact/org.camunda.bpm.springboot/camunda-bpm-spring-boot-starter-webapp --> |
application.yml 部分配置:
1 | spring: |
启动应用,访问 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“ 的过程!
菜鸟本菜,不吝赐教,感激不尽!
