Flowable工作流引擎
工作流
用于覆盖请假、用印、用车、入职、转正、调动、离职、合同、付款等企业审批场景。流程引擎负责建模、流转、任务和审批操作;
标准
- BPMN 2.0:业务流程(请假、报销、审批流) → OMG 制定,已成为ISO 19510 国际标准Object Management Group(对象管理组织)全球最权威的「企业建模 / 流程 / 规则」标准制定非营利组织。
- DMN 1.3:决策规则(金额分级、风控、职级判定) → OMG 标准,替代一堆 if-else
- CMMN 1.1:案例管理(投诉、理赔、纠纷) → OMG 标准,处理无固定顺序的复杂案件
- UML:统一建模语言(类图、时序图)
- CORBA:分布式对象通信标准(老一代微服务)
- MDA:模型驱动架构(从模型自动生成代码)
- DDS:实时数据分发(工业物联网、航天)
BPM(Business Process Management)流程引擎是业务流程管理的核心中枢,负责建模→执行→监控→优化全生命周期管理,把复杂业务流程从代码中解耦,实现可视化、可配置、可追溯、可集成。
基于BPMN 2.0标准的流程执行内核,解释并执行流程模型,驱动任务路由、分配、状态流转与历史归档。
核心能力(BPMN 2.0 为核心)
1)流程建模(设计态)
- 可视化拖拽:设计器画流程图(开始 / 结束、任务、网关、事件)。
- BPMN 元素:
- 任务:人工审批、系统自动、脚本、子流程
- 网关:排他(XOR)、并行(AND)、包含(OR)、事件网关
- 事件:消息、定时、错误、补偿、信号
- 扩展:DMN(决策表)做审批规则,CMMN(案例管理)处理非结构化场景。
2)流程执行(运行态)
- 实例管理:启动、暂停、终止、挂起、恢复、版本迁移。
- 路由控制:串行、并行、分支、汇聚、回退、跳转。
- 任务分配:角色 / 部门 / 人员 / 岗位 / 动态候选人、会签 / 或签。
- 数据上下文:流程变量、表单数据、参数传递、表达式路由。
- 事务与补偿:事务边界、重试、幂等、异常处理、回滚补偿。
3)流程监控与治理
- 实时看板:实例数、待办、逾期、耗时、通过率、瓶颈节点。
- 历史追溯:全链路日志、操作人、时间、数据快照、审计存档。
- 权限与 SLA:节点权限、超时提醒、催办、自动处理、绩效指标。
- 版本管理:流程迭代、灰度发布、新旧实例隔离。
4)集成与扩展
- API / 回调:RESTful、WebHook、消息队列、事件驱动。
- 表单引擎:拖拽表单、字段校验、权限控制、数据绑定。
- 低代码:配置化开发、减少编码、快速上线。
技术选型
- Flowable:2016 从Activiti 6分叉,社区驱动、开源彻底、轻量化、全标准支持
- Camunda:由原 Activiti 核心团队基于Activiti 5重写,企业导向、强稳定、强监控、商业生态成熟
- 共同点:都完全支持 BPMN 2.0、DMN 1.3;都完美集成Spring Boot
- Flowable:6.x 稳定、7.x 开发活跃,Apache 2.0完全开源无限制
- Camunda 7:2025-10EOL(停止社区维护),仅企业版付费支持
- Camunda 8(Zeebe):新架构、云原生、事件驱动、无关系库,商业授权为主,开源版功能弱
Flowable
Flowable是一款轻量级开源工作流引擎,基于BPMN 2.0标准实现业务流程自动化。
通过流程图直观定义,引擎自动处理状态变更和事件通知。
核心模块:
- 流程建模工具:支持BPMN 2.0标准的XML格式流程定义
- 流程引擎核心:负责流程实例的生命周期管理
- 任务管理模块:处理人工任务分配与完成
- 持久化层:基于MyBatis的数据库操作封装
- 事件监听机制:支持流程执行过程中的事件回调
- REST API服务:提供远程调用接口
传统企业业务流程管理面临三大痛点:
硬编码实现:业务规则变更需重新编译部署
流程碎片化:跨系统流程难以统一监控
执行不透明:缺乏流程执行轨迹的完整记录
Flowable的诞生解决了这些核心问题:
动态流程配置:通过修改BPMN文件即可调整流程逻辑
统一执行环境:所有流程节点在引擎内统一调度
完整审计追踪:自动记录每个流程节点的执行信息
Maven项目
<properties> <spring.boot.version>3.5.15</spring.boot.version> <flowable.version>7.2.0</flowable.version> </properties> <!-- SpringBoot Actuator 基础包(actuator starter依赖它) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- BPM核心流程引擎 核心流程引擎:流程定义、实例、任务、变量、异步执行器、BPMN 解析等基础能力; --> <dependency> <groupId>org.flowable</groupId> <artifactId>flowable-spring-boot-starter-process</artifactId> <version>${flowable.version}</version> </dependency> <!--对接 Spring Boot Actuator,提供自定义监控端点: /actuator/flowable 总入口 流程引擎状态、任务统计、作业执行器指标、缓存信息 --> <dependency> <groupId>org.flowable</groupId> <artifactId>flowable-spring-boot-starter-actuator</artifactId> <version>${flowable.version}</version> </dependency> <!-- 如果需要REST接口 --> <dependency> <groupId>org.flowable</groupId> <artifactId>flowable-spring-boot-starter-process-rest</artifactId> <version>${flowable.version}</version> </dependency>yaml
management: endpoints: web: exposure: include: health,info,flowable endpoint: health: show-details: always # flowable actuator 相关暂无额外大量配置,开箱即用 flowable: async-executor-activate: true database-schema-update: false # 生产建议关闭,使用脚本初始化核心模块源码解析
核心引擎层
提供了BPMN工作流、CMMN案例管理和DMN决策的核心能力
当调用ProcessEngineConfiguration.buildProcessEngine()时,引擎初始化经历以下关键步骤:初始化过程中会创建7个核心服务(Repository/Runtime/Task/History等),每个服务持有对其他服务的引用,形成服务网格架构。
flowable-engine: BPMN 2.0 流程引擎核心模块。
flowable-cmmn-engine: CMMN 1.1 案例管理引擎。
flowable-dmn-engine: DMN 1.1 决策引擎。
flowable-idm-engine: 身份管理引擎,处理用户、组和权限
扩展引擎与服务层
在核心引擎之上,提供了模型、转换、REST API以及应用层面的支持。
- model/converter/validation 模块: 提供BPMN、CMMN等标准的模型定义、XML/JSON转换及校验功能
REST API 模块: 为每个引擎提供独立的REST API,例如
flowable-rest(BPMN)、flowable-cmmn-rest、flowable-idm-rest等,这些API模块最终可以被聚合到一个应用中。应用与集成模块: 包含
flowable-app-engine(应用部署) 和flowable-spring-boot-starter等,方便与Spring Boot集成。
流程定义解析机制
当部署BPMN文件时,引擎会执行以下解析流程:
- XML验证:检查是否符合BPMN 2.0 Schema
- 模型转换:将XML节点转换为内部流程模型
- 依赖检查:验证网关、事件等节点的配置完整性
- 持久化存储:将流程定义存入ACT_RE_PROCDEF表
任务调度算法
Flowable采用异步任务队列+定时器结合的调度机制:
- 异步任务处理:通过
AsyncJobExecutor线程池执行 - 定时任务调度:使用
QuartzScheduler管理延迟任务 - 死锁检测:通过版本号机制防止并发修改冲突
数据库表
Flowable 数据库表命名规则
ACT_RE_* : ’RE’表示 repository(存储)。RepositoryService 接口操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。
ACT_RU_* : ’RU’表示 runtime。RuntimeService, TaskService运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。flowable 只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。
ACT_ID_* : ’ID’表示 identity (组织机构)。IdentityService包含标识的信息,如用户,用户组,等等。
ACT_HI_* : ’HI’表示 history。HistoryService,包含着历史的相关数据,如结束的流程实例,变量,任务,等等。
ACT_GE_* : 存储通用的数据,如ACT_GE_BYTEARRAY(存储BPMN文件、图片等二进制资源)、ACT_GE_PROPERTY(系统属性)
FLW_*:Flowable扩展引擎,Flowable在核心引擎之外提供了多种扩展功能,其表结构通常以FLW_为前缀,-FLW_ACTION_: 动作引擎,存储可触发的动作定义与实例。
-FLW_AUDIT_: 审计引擎,存储业务事件审计流。
-FLW_CO_: 内容引擎,用于存储文档、图片等内容。
-FLW_DO_: 数据对象引擎,用于存储和查询对象,常与主数据管理结合使用。
-FLW_ENGAGE_: 协同引擎,支持会话和消息功能。
数据库表结构 (34 张表,不同版本数量可能会有出入)
一般数据 (2)
ACT_GE_BYTEARRAY 通用的流程定义和流程资源
ACT_GE_PROPERTY 系统相关属性
流程定义表 (3)
ACT_RE_DEPLOYMENT 部署单元信息
ACT_RE_MODEL 模型信息
ACT_RE_PROCDEF 已部署的流程定义
运行实例表 (10)
ACT_RU_EXECUTION 运行时流程执行实例
ACT_RU_DEADLETTER_JOB 正在运行的任务表
ACT_RU_EVENT_SUBSCR 运行时事件
ACT_RU_HISTORY_JOB 历史作业表
ACT_RU_IDENTITYLINK 运行时用户关系信息
ACT_RU_JOB 运行时作业表
ACT_RU_SUSPENDED_JOB 暂停作业表
ACT_RU_TASK 运行时任务表
ACT_RU_TIMER_JOB 定时作业表
ACT_RU_VARIABLE 运行时变量表
流程历史记录 (8)
ACT_HI_ACTINST 历史的流程实例
ACT_HI_ATTACHMENT 历史的流程附件
ACT_HI_COMMENT 历史的说明性信息
ACT_HI_DETAIL 历史的流程运行中的细节信息
ACT_HI_IDENTITYLINK 历史的流程运行过程中用户关系
ACT_HI_PROCINST 历史的流程实例
ACT_HI_TASKINST 历史的任务实例
ACT_HI_VARINST 历史的流程运行中的变量信息
用户用户组表 (9)
ACT_ID_BYTEARRAY 二进制数据表
ACT_ID_GROUP 用户组信息表
ACT_ID_INFO 用户信息详情表
ACT_ID_MEMBERSHIP 人与组关系表
ACT_ID_PRIV 权限表
ACT_ID_PRIV_MAPPING 用户或组权限关系表
ACT_ID_PROPERTY 属性表
ACT_ID_TOKEN 系统登录日志表
ACT_ID_USER 用户表
其他表 (2)
ACT_EVT_LOG 事件日志表
ACT_PROCDEF_INFO 流程定义信息
参考文档:
流程设计器(BPMN) | RuoYi Office 文档
Flowable数据字典详解数据库表结构与命名规则-开发者社区-阿里云
Overview (Flowable Open Source 7.2.0.10)
Flowable工作流引擎深度解析:从源码到架构设计-百度开发者中心
