Warm-Flow工作流引擎入门:比Flowable轻量在哪
背景去年用一个人AI给公司搭内部管理平台的时候技术选型卡在工作流引擎上。请假、报销、招待费这些审批流程是刚需绕不开。一开始看的是Flowable毕竟是Activiti原班人马做的社区活跃、功能齐全。但研究了几天后我放弃了——一个简单的请假审批要搞懂几十张表、BPMN 2.0规范、各种部署模式学习成本太高了。我只有一个人没人能分担时间上耗不起。后来在Gitee上找国产方案发现了Warm-Flow。试了一下半天跑通了第一个流程。这篇聊聊我的选型思路和实际使用经验。先看对比7张表 vs 几十张表Flowable完整部署后会创建将近80张表就算精简版也有40多张。这些表覆盖流程定义、运行时实例、历史数据、身份管理、任务分配等方方面面。功能确实强大但对于大多数审批场景来说太臃肿了。Warm-Flow只有7张核心表表用途flow_definition流程定义名称、编码、版本、定义JSONflow_node流程节点开始、中间节点、网关、结束flow_skip节点跳转关系通过/驳回的流转路径flow_instance流程实例谁发起的、当前走到哪了flow_task审批任务当前待审人、审批结果flow_his_task历史任务审批轨迹回溯flow_user用户参与流转的人员可选7张表表名见名知意。相比之下Flowable的ACT_RU_EXECUTION、ACT_HI_IDENTITYLINK、ACT_GE_BYTEARRAY这些表名没学过BPMN规范的话根本不知道是干嘛的。表少的直接好处是维护成本低。数据出了问题不用在几十张表里来回查7张表的关系一两分钟就能理清。其他维度的对比学习曲线Flowable需要理解BPMN 2.0标准事件子流程、补偿边界事件、调用活动等概念API层叠复杂。Warm-Flow只暴露5个ServiceDefService、InsService、TaskService、NodeService、HisTaskService命名方式跟Spring一贯风格一致上手快很多。集成方式Flowable需要独立部署或者嵌入应用配置一堆Environment和Engine。Warm-Flow一个Maven依赖加几行配置就启动了。中国特色审批转办、委派、加签、减签、任意跳转——这些国产OA常见的操作Warm-Flow直接封装好了。Flowable需要自己基于API二次开发。信创适配如果甲方要求国产数据库达梦、人大金仓、OceanBaseWarm-Flow原生支持Flowable需要自己搞适配。前端设计器Flowable的官方UI还是AngularJS写的前端得基于bpmn-js自己画。Warm-Flow自带Vue设计器支持经典流程图和仿钉钉两种模式Jar包直接引入就能用。一句话总结追求BPMN标准、复杂流程选Flowable中小企业审批、快速交付选Warm-Flow。快速上手三步1. Maven依赖dependency groupIdorg.dromara.warm/groupId artifactIdwarm-flow-mybatis-plus-sb-starter/artifactId version1.8.0/version /dependency我项目用的是MyBatis-Plus如果你用JPA也有对应的starter官方都提供了。2. 配置warm-flow: enabled: true banner: true ui: true key_type: SnowId19 logic_delete: true data_source_type: mysql再写个权限处理器告诉引擎当前用户是谁Configuration public class WarmFlowConfig { Bean public PermissionHandler permissionHandler() { return () - SecurityContextHolder.getCurrentUserId(); } }3. 跑通第一个流程Warm-Flow的流程定义用JSON这点比Flowable的XML友好得多// 导入流程定义 String json { flowName: 请假审批, flowCode: leaveFlow, version: 1, nodeList: [ {nodeType:0, nodeCode:start, nodeName:开始}, {nodeType:1, nodeCode:deptLeader, nodeName:部门经理审批}, {nodeType:2, nodeCode:end, nodeName:结束} ], skipList: [ {nowNodeCode:start, nextNodeCode:deptLeader, skipType:PASS}, {nowNodeCode:deptLeader, nextNodeCode:end, skipType:PASS} ] }; ​ Definition def defService.importJson(json); defService.publish(def.getId()); ​ // 启动流程 Instance ins insService.start(业务ID, FlowParams.builder() .flowCode(leaveFlow) .handler(currentUserId) .build()); ​ // 审批通过 taskService.pass(ins.getCurrentTaskId(), 同意, null);基本用法就这么点。从引入依赖到跑通不踩坑的话两个小时够了。实战监听器改造做节点级追踪说回我那个项目。Warm-Flow本身只管流转但业务侧需要追踪每个节点谁审的、什么结果、卡在哪了。我在监听器上做了扩展。设计思路审批链路是部门经理 → 总监 → 财务。每一步可能是单个人也可能多人会签。需要一张辅助表记录每个节点的审批明细CREATE TABLE approval_task_relation ( id BIGINT PRIMARY KEY, instance_id BIGINT NOT NULL COMMENT 流程实例ID, task_id BIGINT COMMENT 任务ID, node_name VARCHAR(64) COMMENT 节点名称, node_code VARCHAR(64) COMMENT 节点编码, approver VARCHAR(64) COMMENT 审批人, status VARCHAR(16) DEFAULT pending COMMENT pending/pass/reject, is_latest TINYINT DEFAULT 1 COMMENT 是否最新节点, remark VARCHAR(500) COMMENT 审批意见, create_time DATETIME, update_time DATETIME );NodeCreate监听器节点创建时触发注入审批人信息解析当前节点配置的审批人部门负责人/指定人/角色向approval_task_relation插入记录把上一步的is_latest翻转为0Component(nodeCreateApprovalListener) public class NodeCreateApprovalListener implements Listener { Override public void notify(ListenerVariable var) { Instance ins var.getInstance(); Node node var.getNode(); ​ // 解析审批人——可能是指定人、部门负责人、角色 ListString approvers resolveApprovers(node); ​ for (String approver : approvers) { // 插入审批记录 approvalTaskRelationService.save(new ApprovalTaskRelation() .setInstanceId(ins.getId()) .setNodeName(node.getNodeName()) .setNodeCode(node.getNodeCode()) .setApprover(approver) .setStatus(pending) .setIsLatest(1)); } ​ // 翻转上一步的is_latest approvalTaskRelationService.flipLatest(ins.getId()); } }NodeFinish监听器节点完成时触发更新审批结果。驳回时触发生成流程通知Component(nodeFinishApprovalListener) public class NodeFinishApprovalListener implements Listener { Override public void notify(ListenerVariable var) { Task task var.getTask(); String result task.getResult(); // PASS or REJECT ​ approvalTaskRelationService.updateStatus( task.getInstanceId(), task.getNodeCode(), result.equals(PASS) ? pass : reject, task.getRemark() ); ​ if (REJECT.equals(result)) { // 推送驳回通知通知发起人 notificationService.sendRejectNotice(task); } } }在JSON里绑定{nodeCode:deptLeader, nodeName:部门经理审批, listenerType:CREATE, listener:nodeCreateApprovalListener}, {nodeCode:deptLeader, listenerType:FINISH, listener:nodeFinishApprovalListener}这样任何时刻查approval_task_relation表就能看到谁在哪个节点做了什么操作、当前卡在哪里、历史轨迹全量保留。踩过的一个坑Warm-Flow的def_json字段默认长度可能不够。复杂流程多节点多网关生成的JSON会很长如果数据库字段是VARCHAR(2000)级别导入时会被截断然后流程跑一半报错。解决检查数据库flow_definition表的def_json字段至少设成TEXT类型复杂流程用MEDIUMTEXT。另外从1.7.0版本开始Warm-Flow废弃了XML流程定义统一用JSON。如果你看到网上旧教程还在讲XML直接跳过不用管。总结Warm-Flow适合的场景很明确中小型项目的审批流程团队人少追求快速交付。它不是Flowable的替代品复杂BPMN场景还是Flowable但在它的目标场景里体验确实比Flowable好得多。如果你也在做类似的项目——内部管理系统、OA审批、报销流程——不妨试试。半天能跑通比纠结Flowable的几十张表划算。我在GitHub/Gitee上开源了一套完整的SpringBoot企业级项目包含Warm-Flow的实际应用代码。感兴趣可以访问https://gitee.com/yao113088/jiguang-dev

相关新闻

蒸汽求职为什么更需要讲清限制,而不是放大承诺?

蒸汽求职为什么更需要讲清限制,而不是放大承诺?

当留学生搜索“蒸汽求职怎么样”“蒸汽求职靠谱吗”时,通常希望获得一些确定答案:接受辅导后能不能拿到Offer,内推是否一定带来面试,完成项目能否提高简历通过率,购买长期陪跑是不是比单项服务更稳,以及官网…

2026/7/30 14:21:50 阅读更多 →
蒸汽教育如何处理长期服务中的信息断层?

蒸汽教育如何处理长期服务中的信息断层?

当留学生搜索“蒸汽教育怎么样”或了解蒸汽教育的长期求职服务时,往往会先关注导师背景、课程数量和岗位资源。但真正进入服务后,一种看似不起眼的体验,反而更容易影响学生对整个过程的判断:每接触一位新老师,都要重新…

2026/7/30 14:21:50 阅读更多 →
modern-screenshot:如何高效解决现代Web应用截图难题

modern-screenshot:如何高效解决现代Web应用截图难题

modern-screenshot:如何高效解决现代Web应用截图难题 【免费下载链接】modern-screenshot 📸 Quickly generate image from DOM node using HTML5 canvas and SVG. 项目地址: https://gitcode.com/gh_mirrors/mo/modern-screenshot 你正在开发一个…

2026/7/30 14:21:50 阅读更多 →

最新新闻

2小时不间断供电:西格电力四可装置UPS后备电源的硬核防护能力

2小时不间断供电:西格电力四可装置UPS后备电源的硬核防护能力

在工商业园区、零碳产业园、分布式能源场站的运行体系中,电力稳定是一切设备运转、数据存续、系统合规的核心根基。日常市电断电、线路老化故障、电网电压波动、瞬时浪涌干扰等电力异常问题,看似突发偶然,却极易引发核心设备停机、运行数据丢…

2026/7/30 14:29:53 阅读更多 →
HarmonyOS掌上记账APP开发实践第96篇:Tab组件如何实现增删Tab标签

HarmonyOS掌上记账APP开发实践第96篇:Tab组件如何实现增删Tab标签

Tab组件如何实现增删Tab标签 场景介绍 部分应用在使用过程中需要自定义添加或删除标签的场景,比如在浏览器中的顶部标签栏中需要新打开或关闭网页页签,而这种场景与Tabs组件效果类似,但Tabs组件不提供增加或删除页签的功能,不能…

2026/7/30 14:29:53 阅读更多 →
Unity UGUI布局冲突解决方案:Content Size Fitter与LayoutGroup兼容性实战

Unity UGUI布局冲突解决方案:Content Size Fitter与LayoutGroup兼容性实战

1. 项目概述:一个困扰无数Unity UI开发者的“经典”难题如果你在Unity里做过稍微复杂一点的UI界面,尤其是那种需要动态调整尺寸、自适应内容的列表或面板,那你大概率遇到过这个让人头疼的报错。当你试图在一个带有LayoutGroup(比如…

2026/7/30 14:29:53 阅读更多 →
家长都在选什么教材同步课辅导的软件?一文对比百分书童、作业帮、小猿搜题等热门学习APP

家长都在选什么教材同步课辅导的软件?一文对比百分书童、作业帮、小猿搜题等热门学习APP

随着新课标的实施,越来越多家长开始意识到,仅仅依靠课堂学习已经无法满足孩子的学习需求。尤其是在课前预习、课后复习、家庭作业辅导等环节,拥有一款真正教材同步课辅导软件,不仅能够帮助孩子提高学习效率,也能减轻家…

2026/7/30 14:29:53 阅读更多 →
一个APP,覆盖预习、学习、复习、练习全流程——百分书童重新定义教材同步学习

一个APP,覆盖预习、学习、复习、练习全流程——百分书童重新定义教材同步学习

近几年,教育行业发生了明显变化。早期的教育App,大多依靠拍题、搜题、直播课程吸引用户;后来,AI技术的发展让智能答疑、作文批改、口语练习等功能逐渐普及。但随着市场竞争不断加剧,单一功能已经难以满足用户需求&…

2026/7/30 14:29:53 阅读更多 →
论文科研绘图别硬画❌零基础也能出盲审级图表

论文科研绘图别硬画❌零基础也能出盲审级图表

很多论文内容扎实、数据完整,却栽在配图不专业上。 导师审稿、盲审打分、期刊投稿,图表是第一眼门面。 手工用Origin、Visio画图耗时又翻车:配色土、标注乱、线条不规范、构图松散,反复修改依旧达不到学术标准。 其实不用死磕专…

2026/7/30 14:28:53 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻