Flowable 工作流引擎实战:从 JBPM 起源到 70 张 BPMN 数据库表全解
为什么选择 Flowable
工作流引擎是企业 OA / 审批 / 业务流程的核心组件。Java 生态三大工作流框架:
| 引擎 | 起源 | 现状 | 适合场景 |
|---|---|---|---|
| JBPM | RedHat/JBoss | Drools 规则引擎重构后偏 BPM | 学术研究、规则引擎 |
| Activiti | Alfresco | 创始团队出走,基本停滞 | 老项目维护 |
| Flowable | Activiti 核心团队 fork | 活跃维护中,新功能持续 | 新项目首选 |
| Camunda | Activiti 另一派 | 商业版成熟、DMN 强 | 大型企业、商业项目 |
核心结论:新项目推荐 Flowable(开源活跃)+ 商业需求考虑 Camunda 7/8。
JBPM → Activiti → Flowable 演进史
2003-2010:JBPM 4 时代
Jboss(被 RedHat 收购)发行 JBPM4 时,因合作伙伴关系闹翻,其中一个核心人员离职加入 Alfresco,发布 Activiti 5.0.alpha1。版本号直接从 5.0 起步,携带 JBPM4 全部特性,“正式叫板 JBPM4”。
同期,Jboss 用自研 Drools 规则引擎重构 JBPM4 → JBPM5。但因 JBoss 在国内使用率远不如 Tomcat,JBPM 后续版本在国内影响力减弱。
2010-2016:Activiti 独大
Activiti 一直在 5.0 版本迭代,6.x 引入 BPMN 2.0 完整规范、CMMN(案例管理)、DMN(决策模型)。Activiti 6 是 Flowable 的直接祖先。
2016:Camunda + Flowable 双向 fork
Activiti 创作者又因合作伙伴关系不和,先后创办 Camunda 和 Flowable。Activiti 5.0 问题修复不过来,官方放弃,两个 fork 都从 Activiti 6.0.0.Beta4 拉分支。
Flowable 起步版本 5.22,直接对齐当时 Activiti 的小版本,做了"零成本迁移"。
关键时间线
| 年份 | 事件 |
|---|---|
| 2003 | JBPM 1.x 起步 |
| 2010 | Activiti 5.0.alpha1 发布 |
| 2016-12 | Flowable 第一个 GA 版本(基于 Activiti 6.0.0.Beta4) |
| 2017 | Flowable 6.0 GA,CMMN + DMN 完整支持 |
| 2018-2020 | 快速迭代,6.4+ 开始分化商业版与开源版 |
| 2020+ | Flowable 6.4.1 后大力发展商业版,部分功能不再开源 |
实战坑:Flowable 6.4.1 后部分功能仅商业版(表单生成器、历史数据同步到 ES、DMN 部分功能、MongoDB 支持)。新项目选 6.3.1 或 6.4.0 仍可用开源完整功能。
70 张表全分类(按表前缀)
Flowable 启动时会在数据库创建 70+ 张表,按前缀分 5 大族:
1. ACT_RE_*(Repository 仓库表,3 张)
存储"静态"信息(流程定义、资源)。
| 表名 | 作用 |
|---|---|
act_re_deployment | 部署记录 |
act_re_model | 部署单元信息(Modeler 设计器) |
act_re_procdef | 已部署的流程定义 |
2. ACT_RU_*(Runtime 运行时表,10+ 张)
存储运行时信息(流程实例、任务、变量、作业)。流程结束时自动清理,保证运行时表小快。
| 表名 | 作用 |
|---|---|
act_ru_execution | 运行时流程执行实例 |
act_ru_task | 运行时任务表 |
act_ru_variable | 运行时变量 |
act_ru_identitylink | 运行时用户关系(参与者) |
act_ru_job / act_ru_timer_job / act_ru_deadletter_job | 异步作业 / 定时作业 / 死信 |
act_ru_actinst | 正在运行的节点表 |
act_ru_event_subscr | 运行时事件订阅 |
act_ru_suspended_job | 暂停的作业 |
3. ACT_HI_*(History 历史表,10+ 张)
存储历史数据(已完成的流程实例、变量、任务)。
| 表名 | 作用 |
|---|---|
act_hi_procinst | 历史的流程实例 |
act_hi_taskinst | 历史的任务实例 |
act_hi_actinst | 历史的活动实例 |
act_hi_varinst | 历史的变量 |
act_hi_identitylink | 历史用户关系 |
act_hi_comment | 历史的说明性信息 |
act_hi_attachment | 历史的附件 |
act_hi_detail | 历史的细节(变量变更) |
act_hi_entitylink | 历史的参与人员 |
act_hi_tsk_log | 任务操作日志 |
4. ACT_GE_*(General 通用表,2 张)
| 表名 | 作用 |
|---|---|
act_ge_bytearray | 通用的流程定义和资源(XML、图片) |
act_ge_property | 系统相关属性(NEXT_DBNAME_VERSION 等) |
5. ACT_ID_*(Identity 身份表,9 张,极少使用)
组织信息(用户、用户组)。生产环境推荐对接企业自己的 IAM,不用 Flowable 内置身份表。
| 表名 | 作用 |
|---|---|
act_id_user | 用户基本信息 |
act_id_group | 用户组 |
act_id_membership | 用户与组关系 |
act_id_info | 用户扩展表 |
act_id_priv / act_id_priv_mapping | 权限体系 |
act_id_token | 系统登录日志 |
act_id_property | 属性表 |
act_id_bytearray | 二进制数据 |
6. CMMN / DMN 表族(可选)
启用 CMMN(Case Management)和 DMN(Decision Model)引擎会创建:
act_cmmn_*(11+ 张):CMMN 案例管理表act_dmn_*(6+ 张):DMN 决策表
实战坑:CMMN 适用于"非结构化流程"(如医疗病例管理),绝大多数 OA 审批只需 BPMN。关闭 CMMN/DMN(
flowable.cmmn.enabled=false)可减少 20+ 张无用表。
7. ACT_FO_*(Form 表单引擎,6 张)
以 ACT_FO_FORM_ 开头的表存储表单定义 + 表单实例。
| 表名 | 作用 |
|---|---|
act_fo_form_definition | 表单定义 |
act_fo_form_deployment | 表单部署 |
act_fo_form_instance | 表单实例 |
act_fo_form_resource | 表单资源(JSON) |
act_fo_databasechangelog / act_fo_databasechangeloglock | Liquibase 迁移 |
6.4.1 后表单引擎部分功能仅商业版,国内项目通常用 Vue/React + 自定义表单 + Flowable 流程 API 替代。
8. ACT_EVT_LOG(事件日志表,1 张)
存储流程事件日志(任务分配、流程结束等),可通过 eventListeners 配置自定义处理。
流程操作涉及的表
部署流程
| |
启动流程实例
| |
处理任务
| |
流程结束
| |
快速开始
1. 启动 Flowable UI
| |
2. Spring Boot 集成
| |
| |
3. 部署流程 + 启动实例
| |
4. 查询待办 + 完成任务
| |
Flowable vs Camunda 选型
| 维度 | Flowable | Camunda 7 | Camunda 8 |
|---|---|---|---|
| 架构 | 单体 Java | 单体 Java | 云原生 Zeebe + Operate + Tasklist |
| 开源 | 6.4.1 前完整开源 | 完整开源 | CE 限制功能,EE 商业 |
| DMN | 弱(半成品) | ✅ 强 | ✅ 强 + FEEL |
| CMMN | ✅ 强 | ✅ 强 | 移除 CMMN |
| 性能 | 中等 | 中等 | 高吞吐(Zeebe 分区日志) |
| Spring 集成 | ✅ 一键 starter | 需手动 | 需手动 |
| 适合 | 传统 OA / 审批 | 大型企业、规则密集 | 高吞吐、流程编排 |
选型建议:
- OA / 审批 / < 100 TPS:Flowable
- DMN 规则密集 / 中等吞吐:Camunda 7
- 微服务编排 / 1000+ TPS:Camunda 8(Zeebe)
前置知识与下一步
前置:
- BPMN 2.0 规范基础(流程图绘制)
- Spring Boot 集成
- MySQL / 数据库基础
下一步:
- 复杂场景学 多实例任务(会签 / 或签)
- 集成 事件网关(邮件触发流程)
- 性能调优:async executor + job executor 线程数
小结
Flowable 是 Java 工作流引擎的事实标准之一,从 JBPM → Activiti → Flowable 的演进中积累了 20 年企业级流程经验。70 张表看似复杂,本质是 5 大族(仓库 / 运行时 / 历史 / 通用 / 身份)的职责分离。理解每张表的作用是排查流程"卡住 / 报错"问题的关键。开源版 6.4.0 仍可用,复杂需求考虑 Camunda 7/8。
2024+ 视角:Flowable 7.0 / 8.0 与 Camunda 8 的对决
Flowable 版本演进(2024+ 视角)
| 版本 | 发布时间 | 状态 | 适用 |
|---|---|---|---|
| 6.4.0 | 2019 | 最后一个完全开源版本 | 仍有项目用 |
| 6.5 - 6.8 | 2020-2024 | 商业版功能逐渐闭源 | 需评估 |
| 7.0 | 2024-Q4 | 全新架构(Open Source 优先) | 新项目首选 |
| 8.0(计划) | 2025 | 云原生 + CMMN/DMN 重构 | 待观察 |
Flowable 7.0 核心变化
- 架构升级:基于 Spring Boot 3.x + JDK 17+ 全面重构
- CMMN/DMN 重新开源:6.x 后期商业化的功能,7.0 重新回到社区
- REST API 标准化:与 Cloud Flowable 平台深度集成
- 数据库 schema 简化:从 70 张表 → 精简到 50 张左右
- OpenAPI 文档自动生成:所有 Service 接口都有 Swagger 文档
| |
Flowable Cloud(商业版)2024+ 新变化
- SaaS 化:直接在 flowable.com 注册账号使用
- Cloud-native:与 K8s / OpenShift 深度集成
- Form Engine 完整版:表单生成器 / 表单历史同步 ES
- DMN 完整版:与商业规则引擎无缝集成
Camunda 8 持续领先
Camunda 8 基于 Zeebe 分区日志架构,是云原生时代的事实标准:
| |
Camunda 8 vs Flowable 7 关键差异:
| 维度 | Camunda 8 | Flowable 7 |
|---|---|---|
| 架构 | 云原生 + 分区日志 | 单体 Java |
| 性能 | 10K+ TPS | 中等(< 1K TPS) |
| DMN | ✅ FEEL 标准 | ✅ |
| CMMN | ❌ 移除 | ✅ |
| SaaS | ✅ | ✅(Cloud Flowable) |
| 开源 | CE 限制功能 | 核心开源完整 |
| 选型 | 大型企业 / 流程密集 | 中小 OA / 审批 |
Flowable 7 在 AI 时代的尝试
2024 内部路线图泄露(社区贡献):
- 流程 AI 助手:自然语言转 BPMN(GPT-4 辅助)
- 智能分配:基于历史数据自动推荐任务处理人
- 流程挖掘(Process Mining)GA:与商业版同名功能对标 Celonis / Minit
实战:Flowable 7 + Spring Boot 3.x 启动
| |
2024+ 选型决策树
| |
2024+ 实战坑
- Flowable 6.4.0 → 7.0 升级:数据库 schema 变了,必须用
flowable-upgrade工具迁移 - Camunda 8 SaaS 在国内访问慢——国内项目建议自建 Zeebe + Operate
- 历史数据清理:
act_hi_*表 1 年不清理可能上 GB 级别——加定时清理任务 - DMN 业务规则:规则频繁改的业务用 Camunda DMN(FEEL 标准)+ 业务方自助维护
经验补记
- Flowable 6.x 老项目维护:6.4.0 仍可用但 2024 后社区活跃度低,新项目建议直接 7.0
- Camunda 7 vs 8 的迁移成本:从 7 迁 8 是重写级别——架构差异巨大
- 流程引擎选型核心原则:复杂度匹配——简单业务用复杂引擎是过度设计
