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

相关新闻

Obsidian Local REST API:如何为你的知识库构建自动化编程接口

Obsidian Local REST API:如何为你的知识库构建自动化编程接口

Obsidian Local REST API:如何为你的知识库构建自动化编程接口 【免费下载链接】obsidian-local-rest-api A secure REST API and Model Context Protocol (MCP) server for your vault. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-local-rest-api …

2026/7/30 14:23:02阅读更多 →
PNG格式深度解析:从原理到实战优化与WebP对比

PNG格式深度解析:从原理到实战优化与WebP对比

1. 从一次“图片变胖”的线上事故说起 去年,我们团队负责的一个面向C端用户的H5活动页上线后,突然收到大量用户反馈,说页面加载速度极慢,尤其是在移动网络下,几乎无法正常浏览。我们紧急排查,发现罪魁祸首是…

2026/7/30 14:21:02阅读更多 →
魔兽世界字体合并工具:3步打造完美游戏字体体验终极指南

魔兽世界字体合并工具:3步打造完美游戏字体体验终极指南

魔兽世界字体合并工具:3步打造完美游戏字体体验终极指南 【免费下载链接】Warcraft-Font-Merger Warcraft Font Merger,魔兽世界字体合并/补全工具。 项目地址: https://gitcode.com/gh_mirrors/wa/Warcraft-Font-Merger 还在为魔兽世界中的中文字…

2026/7/30 14:21:02阅读更多 →
微深节能 堆取料机回转定位系统 格雷母线

微深节能 堆取料机回转定位系统 格雷母线

散料堆场堆取料机依靠回转机构调整作业半径,回转位置的精准监测,直接影响混匀取料、分层堆料的作业效果。露天堆场风沙大、雨水交替侵袭,昼夜温差变化显著,传统角度检测设备长期受环境影响,监测数值容易产生偏移&#…

2026/7/30 15:37:19阅读更多 →
2026年应届本科生论文降AI攻略:本科毕业论文AIGC超标免费4.8元快速达标完整处理方案

2026年应届本科生论文降AI攻略:本科毕业论文AIGC超标免费4.8元快速达标完整处理方案

2026年应届本科生论文降AI攻略:本科毕业论文AIGC超标免费4.8元快速达标完整处理方案 应届本科生论文降AI这件事,工具选错、操作错,钱白花还耽误时间。 直接给结论:嘎嘎降AI(www.aigcleaner.com)&#xff…

2026/7/30 15:37:19阅读更多 →
2025八字起名网站专业度排名

2025八字起名网站专业度排名

专业度NO.1:美名助运 国学智能起名网非AI起名, 而是美名助运, 其讲究全局平衡, 另有生态、世态、心态三种分析维度为其独创, 它既查看孩子命理, 又顾及其读书、社交等实际使用场景未来情况, 诸多家长认定它所给名字于孩子一生而言更契合。专业度NO.2:起名网 带有兼具重名率查询…

2026/7/30 15:37:19阅读更多 →
PDF批量处理利器:5大核心技术深度解析与实战应用

PDF批量处理利器:5大核心技术深度解析与实战应用

PDF批量处理利器:5大核心技术深度解析与实战应用 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 项目地址: https://gitcode…

2026/7/30 15:37:19阅读更多 →
Python取整函数全解析:int、floor、ceil、round与//的实战指南

Python取整函数全解析:int、floor、ceil、round与//的实战指南

1. 项目概述:为什么Python取整值得深究? 刚接触Python那会儿,我也觉得取整不就是个 int() 的事儿吗?直到后来在写财务对账脚本时,因为四舍五入的规则没搞对,差点儿出了大篓子;在做分页计算时&…

2026/7/30 15:37:19阅读更多 →
终极命令行音频可视化指南:5个技巧让音乐在终端中“活“起来

终极命令行音频可视化指南:5个技巧让音乐在终端中“活“起来

终极命令行音频可视化指南:5个技巧让音乐在终端中"活"起来 【免费下载链接】cava Cross-platform Audio Visualizer 项目地址: https://gitcode.com/GitHub_Trending/ca/cava CAVA——这个轻量级、跨平台的音频可视化工具,正在改变开发…

2026/7/30 15:35:19阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/30 15:03:16阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/30 12:22:27阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/30 15:13:02阅读更多 →
3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 🚀 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否曾经因为iOS系统的严格…

2026/7/30 0:00:58阅读更多 →
[GESP202606 四级] 扫雷

[GESP202606 四级] 扫雷

B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…

2026/7/30 0:00:58阅读更多 →
Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

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

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

2026/7/30 0:00:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/30 0:27:26阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/30 4:47:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →