ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Flowable工作流引擎

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
  • Flowable6.x 稳定、7.x 开发活跃,Apache 2.0完全开源无限制
  • Camunda 7:2025-10EOL(停止社区维护),仅企业版付费支持
  • Camunda 8(Zeebe):新架构、云原生、事件驱动、无关系库商业授权为主,开源版功能弱

Flowable

Flowable是一款轻量级开源工作流引擎,基于BPMN 2.0标准实现业务流程自动化。

通过流程图直观定义,引擎自动处理状态变更和事件通知。

核心模块:

  1. 流程建模工具:支持BPMN 2.0标准的XML格式流程定义
  2. 流程引擎核心:负责流程实例的生命周期管理
  3. 任务管理模块:处理人工任务分配与完成
  4. 持久化层:基于MyBatis的数据库操作封装
  5. 事件监听机制:支持流程执行过程中的事件回调
  6. 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-restflowable-idm-rest等,这些API模块最终可以被聚合到一个应用中。

  • 应用与集成模块: 包含flowable-app-engine(应用部署) 和flowable-spring-boot-starter等,方便与Spring Boot集成。

流程定义解析机制

当部署BPMN文件时,引擎会执行以下解析流程:

  1. XML验证:检查是否符合BPMN 2.0 Schema
  2. 模型转换:将XML节点转换为内部流程模型
  3. 依赖检查:验证网关、事件等节点的配置完整性
  4. 持久化存储:将流程定义存入ACT_RE_PROCDEF表
任务调度算法

Flowable采用异步任务队列+定时器结合的调度机制:

  1. 异步任务处理:通过AsyncJobExecutor线程池执行
  2. 定时任务调度:使用QuartzScheduler管理延迟任务
  3. 死锁检测:通过版本号机制防止并发修改冲突

数据库表

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工作流引擎深度解析:从源码到架构设计-百度开发者中心

返回列表