推广:flowable工作流引擎就是高级版本的数据库而已(一)
1. 基础类比:数据 vs 流程
| MySQL | Flowable |
|---|---|
定义表结构(如 user、order) |
定义流程模型(BPMN 图,如请假流程) |
插入一行数据(INSERT) |
启动一个流程实例(runtimeService.startProcessInstance()) |
更新数据(UPDATE) |
驱动流程到下一步(taskService.complete(taskId)) |
查询数据(SELECT) |
查询流程状态(historyService 查历史记录) |
删除数据(DELETE) |
终止流程(runtimeService.deleteProcessInstance()) |
2. 核心差异:Flowable 的“高级”特性
(1) 逻辑预定义
-
MySQL:需要手动编写代码实现业务逻辑(如“订单支付后更新库存”)。
-
Flowable:直接在 BPMN 流程图 中定义逻辑(如网关判断、服务任务调用),引擎自动执行。
(2) 状态驱动
-
MySQL:数据是静态的,需外部代码控制状态流转(如
status字段从待审核改为已通过)。 -
Flowable:流程引擎自动管理状态(如从
提交申请→经理审批→HR归档)。
(3) 监听与回调
-
MySQL:需依赖触发器(Trigger)或应用层事件(如 Spring Event)。
-
Flowable:原生支持监听器(Listener),在流程节点触发时自动回调(如
审批通过后发送邮件)。
(4) 历史追踪
-
MySQL:需手动设计历史表或日志表。
-
Flowable:自动记录流程历史(
ACT_HI_*表),支持回溯。
3. 具体场景示例
场景:员工请假审批
-
MySQL 实现:
-
创建表
leave_apply(字段:id,user_id,days,status)。 -
代码中硬编码状态流转逻辑(如
status=1时通知经理审批)。 -
需手动处理超时、撤回等异常情况。
-
-
Flowable 实现:
-
绘制 BPMN 流程图(用户提交 → 经理审批 → 自动归档)。
-
启动流程后,引擎自动推动审批,处理超时(边界事件)、回调通知。
-
通过
ACT_RU_TASK表查看当前任务,ACT_HI_PROCINST表查看历史。
-
4. 协作关系
-
MySQL 是 Flowable 的底层存储:
Flowable 本身依赖数据库(默认使用 MySQL/Oracle 等),所有流程数据(如运行中的任务、历史记录)均存储在表中(ACT_*前缀的表)。 -
配合使用:
-
Flowable 管理流程,MySQL 存储业务数据(如
leave_apply的详细数据)。 -
通过
流程变量(Variables)关联业务数据(如flowable.setVariable("leaveId", 123))。
-
5. 总结
| 维度 | MySQL | Flowable |
|---|---|---|
| 核心功能 | 数据存储与操作 | 业务流程自动化 |
| 灵活性 | 高(需手动编码逻辑) | 中(依赖预定义流程) |
| 适用场景 | 通用数据管理 | 审批流、工单系统、自动化任务 |
| 复杂度 | 低 | 高(需学习 BPMN、引擎 API) |
一句话总结:
MySQL 是“数据库工具”,而 Flowable 是“业务流程自动化工具”——它基于数据库,但抽象了状态管理和逻辑驱动层,让你从手动维护 status 字段的泥潭中解脱出来!
你的类比很形象!Flowable 和 MySQL 确实可以这样对比理解,但 Flowable 更偏向于 “业务流程的自动化管理”,而 MySQL 是纯粹的 “数据存储与操作”。以下是具体类比和差异分析:
1. 基础类比:数据 vs 流程
| MySQL | Flowable |
|---|---|
定义表结构(如 user、order) |
定义流程模型(BPMN 图,如请假流程) |
插入一行数据(INSERT) |
启动一个流程实例(runtimeService.startProcessInstance()) |
更新数据(UPDATE) |
驱动流程到下一步(taskService.complete(taskId)) |
查询数据(SELECT) |
查询流程状态(historyService 查历史记录) |
删除数据(DELETE) |
终止流程(runtimeService.deleteProcessInstance()) |
2. 核心差异:Flowable 的“高级”特性
(1) 逻辑预定义
-
MySQL:需要手动编写代码实现业务逻辑(如“订单支付后更新库存”)。
-
Flowable:直接在 BPMN 流程图 中定义逻辑(如网关判断、服务任务调用),引擎自动执行。
(2) 状态驱动
-
MySQL:数据是静态的,需外部代码控制状态流转(如
status字段从待审核改为已通过)。 -
Flowable:流程引擎自动管理状态(如从
提交申请→经理审批→HR归档)。
(3) 监听与回调
-
MySQL:需依赖触发器(Trigger)或应用层事件(如 Spring Event)。
-
Flowable:原生支持监听器(Listener),在流程节点触发时自动回调(如
审批通过后发送邮件)。
(4) 历史追踪
-
MySQL:需手动设计历史表或日志表。
-
Flowable:自动记录流程历史(
ACT_HI_*表),支持回溯。
3. 具体场景示例
场景:员工请假审批
-
MySQL 实现:
-
创建表
leave_apply(字段:id,user_id,days,status)。 -
代码中硬编码状态流转逻辑(如
status=1时通知经理审批)。 -
需手动处理超时、撤回等异常情况。
-
-
Flowable 实现:
-
绘制 BPMN 流程图(用户提交 → 经理审批 → 自动归档)。
-
启动流程后,引擎自动推动审批,处理超时(边界事件)、回调通知。
-
通过
ACT_RU_TASK表查看当前任务,ACT_HI_PROCINST表查看历史。
-
4. 协作关系
-
MySQL 是 Flowable 的底层存储:
Flowable 本身依赖数据库(默认使用 MySQL/Oracle 等),所有流程数据(如运行中的任务、历史记录)均存储在表中(ACT_*前缀的表)。 -
配合使用:
-
Flowable 管理流程,MySQL 存储业务数据(如
leave_apply的详细数据)。 -
通过
流程变量(Variables)关联业务数据(如flowable.setVariable("leaveId", 123))。
-
5. 总结
| 维度 | MySQL | Flowable |
|---|---|---|
| 核心功能 | 数据存储与操作 | 业务流程自动化 |
| 灵活性 | 高(需手动编码逻辑) | 中(依赖预定义流程) |
| 适用场景 | 通用数据管理 | 审批流、工单系统、自动化任务 |
| 复杂度 | 低 | 高(需学习 BPMN、引擎 API) |
一句话总结:
MySQL 是“数据库工具”,而 Flowable 是“业务流程自动化工具”——它基于数据库,但抽象了状态管理和逻辑驱动层,让你从手动维护 status 字段的泥潭中解脱出来!


浙公网安备 33010602011771号