再见 if-else 地狱!这款国产规则引擎让业务编排效率提升 10 倍!!
LiteFlow 只做基于逻辑的流转,不做基于角色任务的流转。:如果并行组件达到成百上千个,且涉及极其复杂的线程调度,LiteFlow 虽然能做,但它更偏向业务流程编排,而非大数据分布式计算引擎(如 Spark/Flink)。后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等,更糟的是,业务方今
你有没有接过那种祖传代码?一个几千行的 if-else 堡垒,改一行逻辑,要测半天。更糟的是,业务方今天说要"先 A 后 B",明天又改成"A 和 B 并行,等 C 完成再接 D",每次改流程都要重构代码。
LiteFlow 是一个国产规则引擎,专门解决"业务逻辑耦合"问题。它把瀑布流式的代码拆成一个个独立组件,用一套 DSL 语法重新编排,改流程就像搭积木。
解决了什么问题?
传统复杂业务系统的痛点:
-
改一处动全身:代码里到处是硬编码的流程判断,改个顺序要改好几个地方。
-
难以热变更:业务流程调整需要重新发版,没法实时生效。
-
组件复用难:每个业务场景都写一套逻辑,同样的代码在到处复制。
LiteFlow 的核心思路是 "工作台模式" :想象一个工厂流水线,n 个工人围着工作台,每个人只负责自己那道工序,完成就把半成品放回工作台,下一个人接着做。工人之间不需要沟通,只需要关心自己手头的活和工作台上的资源。
映射到代码世界:工人就是组件,工作台就是上下文,工序顺序就是规则配置。

下图是 LiteFlow 官方文档对核心能力(组件编排、实时热更替和复用)的图解:
👉 欢迎加入小哈的星球,你将获得: 专属的项目实战(多个项目) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
-
新项目:《Spring AI 项目实战》正在更新中..., 基于 Spring AI + Spring Boot 3.x + JDK 21;
-
《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17..., 点击查看项目介绍;演示地址:http://116.62.199.48:7070/
-
《从零手撸:前后端分离博客项目(全栈开发)》 2期已完结,演示链接:http://116.62.199.48/;
-
专栏阅读地址:https://www.quanxiaoha.com/column
截止目前,累计输出 100w+ 字,讲解图 4013+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,解锁全部项目,已有4200+小伙伴加入

LiteFlow 是什么?
LiteFlow 是一款国产开源的轻量级规则引擎框架,专注解决复杂业务逻辑的解耦与编排问题,支持 Spring Boot 2.x/3.x,最低 JDK 8 即可运行。
核心功能:
-
组件化拆分:把长链条的业务逻辑拆成独立组件,每个组件只做一件事。
-
规则驱动编排:用简洁的 EL 表达式定义组件执行顺序,支持串行、并行、条件、循环等复杂逻辑。
-
脚本组件支持:支持 Java、JavaScript、Groovy、QLExpress、Python、Lua、Aviator 等多种脚本语言,Java 脚本编译速度在 v2.15.3 版本后提升了 200 倍(2000 个脚本从 30 秒降到 150 毫秒)。
-
热部署能力:规则和脚本可以存放在数据库、注册中心(Nacos、Etcd、Zookeeper),修改后实时生效,无需重启。
-
可视化编排:支持 LiteFlowX[1] 可视化编排界面,拖拽就能设计流程。
-
自带简单监控:框架内自带一个命令行的监控,能够知道每个组件的运行耗时排行。
LiteFlow 的核心是基于 EL 表达式的规则解析引擎,在 v2.15.2 版本中,底层规则引擎从 QLExpress 3 全面升级到 QLExpress 4,带来性能提升:
|
测试指标 |
QL3 版本 |
QL4 版本 |
提升幅度 |
|---|---|---|---|
|
编译阶段 TPS |
2,739 ops |
3,636 ops |
提升 32% |
|
上下文参数注入 |
55,826 ops |
222,625 ops |
提升 300% |
数据来源:LiteFlow 官方压测报告,采用 benchmark 框架,2 次预热、3 次执行取平均值。
QLExpress 是由阿里巴巴开源的轻量级动态脚本引擎,目标是将业务逻辑从繁重的 Java 代码中解耦,变成可以动态执行的脚本。
LiteFlow 在今年的 Gitee 年度开源项目评选中获得了基础软件赛道第二名的成绩。
快速上手
安装
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>liteflow-spring-boot-starter</artifactId>
<version>2.15.3</version>
</dependency>
LiteFlow 支持 JDK 8 ~ JDK 25 全版本,但如果你用 JDK 9+,建议直接上 v2.15.0+ 版本,无需额外配置 JVM 参数。
配置规则文件
在 application.properties 里指定规则文件位置:
liteflow.rule-source=config/flow.el.xml
然后在 resources/config/flow.el.xml 定义规则 THEN(validateOrder, WHEN(checkStock, calcPrice), riskCheck, saveOrder);:
<?xml version="1.0" encoding="UTF-8"?>
<flow>
<chain name="orderChain">
THEN(
validateOrder,
WHEN(checkStock, calcPrice),
riskCheck,
saveOrder
);
</chain>
</flow>
这段表达式定义了执行的拓扑结构:
-
THEN:串行执行,必须先执行完前面的节点,才能进入下一个。
-
WHEN:并行执行,在此例中,
checkStock(检查库存)和calcPrice(计算价格)会同时开启异步线程执行,提升接口响应速度。
规则含义:先校验订单 → 然后并行查库存和算价格 → 再做风险检查 → 最后保存订单。
定义组件
通过实现 NodeComponent定义组件:
@LiteflowComponent("validateOrder")
publicclass ValidateOrderCmp extends NodeComponent {
@Override
public void process() {
// 从上下文获取订单数据
OrderContext context = this.getContextBean(OrderContext.class);
Order order = context.getOrder();
// 校验逻辑
if (order.getAmount() <= 0) {
thrownew IllegalArgumentException("订单金额必须大于0");
}
// 把结果放回上下文,供后续组件使用
context.setValid(true);
}
}
-
@LiteflowComponent:复合注解,将类声明为 Spring 的 Bean,并给组件起一个 ID(validateOrder),这个 ID 必须与 XML 文件中的名称对应。 -
getContextBean:LiteFlow 处理数据的精髓,流程中的所有组件共享一个(或多个)上下文对象,避免在方法间传递大量参数,实现逻辑解耦。
LiteFlow 在 v2.8.0 后支持多上下文,在执行的时候同时初始化你传入的多个上下文。在组件里也可以根据 class 类型很方便的拿到。
// 传入
LiteflowResponse response = flowExecutor.execute2Resp("chain1", 流程初始参数, OrderContext.class, UserContext.class, SignContext.class);
// 获取
OrderContext orderContext = this.getContextBean(OrderContext.class);
UserContext userContext = this.getContextBean(UserContext.class);
SignContext signContext = this.getContextBean(SignContext.class);
同理定义其他组件(checkStock、calcPrice、riskCheck、saveOrder)。
执行流程
@Service
public class OrderService {
@Resource
private FlowExecutor flowExecutor;
public void createOrder(Order order) {
LiteflowResponse response = flowExecutor.execute2Resp(
"orderChain",
order, // 将数据作为初始参数
OrderContext.class // 让 LiteFlow 自动实例化上下文
);
}
}
使用场景
场景一:电商价格引擎
电商的价格计算通常涉及多个维度:原价、会员折扣、优惠券、满减活动、店铺优惠等。用 LiteFlow 可以把每个计算因子拆成独立组件,用规则灵活组合。
规则示例:
<chain name="priceChain">
THEN(
getBasePrice,
WHEN(
memberDiscount,
couponDiscount,
activityDiscount
),
finalPrice,
savePrice
);
</chain>
好处是:新增一种优惠类型,只需要加一个组件,然后在规则里配上位置,不用改现有代码。
场景二:复杂审批流程
LiteFlow 不做"基于角色的审批流转"(那是 Flowable、Flowlong 这类工作流引擎的事),但它适合处理审批环节里的业务逻辑。
比如一个采购审批,需要:
-
校验采购金额是否超预算
-
并行查询供应商库存和价格
-
根据金额走不同的风控规则
-
生成采购单
这些逻辑用 LiteFlow 编排,比写在 Service 里要清晰。
场景三:数据清洗 ETL
数据处理场景里,经常有多个清洗步骤:去重、格式转换、数据补全、质量检查。用 LiteFlow 可以把这些步骤组件化,根据不同数据源配置不同规则。
场景四:实时风控决策
风控规则变化频繁,用脚本组件 + 规则热部署,可以在不停机的情况下调整规则。比如:"最近欺诈多了,把某类交易的阈值从 1000 降到 500",改一下脚本配置就行。
EL 规则语法
LiteFlow 的 EL 语法是其核心竞争力,十分钟就能上手,但能编排出非常复杂的流程。
基本语法
串行(THEN/SER):按顺序执行
THEN(a, b, c, d)
<!-- 或者用语义更明确的 SER -->
SER(a, b, c, d)
并行(WHEN/PAR):同时执行
WHEN(a, b, c)
<!-- 或者用 PAR -->
PAR(a, b, c)
嵌套组合:
THEN(
a,
WHEN(b, THEN(c, d)),
e
)
规则含义:先执行 a → 然后并行执行 b 和"先 c 后 d" → 最后执行 e。
高级特性
忽略错误(ignoreError):
THEN(
a,
WHEN(b, c, d).ignoreError(true),
e
)
即使 b、c、d 中有组件报错,e 仍会执行。
任一完成则继续(any):
THEN(
a,
WHEN(b, c, d).any(true),
e
)
b、c、d 中任何一个先完成,就忽略其他继续往下走。
指定必须等待的节点(must):
WHEN(b, c, d).must(b, c)
b、c 必须等执行完,d 如果还没完就忽略。
按比例完成(percentage):
WHEN(a, b, c, d, e).percentage(0.6)
5 个组件里随机执行 3 个(5 × 0.6 = 3),完成就继续。
不适合什么场景?
-
审批流转:LiteFlow 只做基于逻辑的流转,不做基于角色任务的流转。如果要实现"A 审批完传给 B,B 审批完传给 C"这类场景,应该用 Flowable 或 Flowlong。
-
简单业务:如果一个流程只有 2-3 个步骤,且基本不会变,上规则引擎可能有点杀鸡用牛刀。
-
超大规模并行计算:如果并行组件达到成百上千个,且涉及极其复杂的线程调度,LiteFlow 虽然能做,但它更偏向业务流程编排,而非大数据分布式计算引擎(如 Spark/Flink)。
与其他方案对比
|
对比维度 |
LiteFlow |
自己写 if-else |
Flowable/Flowlong |
|---|---|---|---|
| 学习曲线 |
低(EL 语法简单) |
最低(原生 Java) |
中(需理解 BPMN) |
| 流程灵活性 |
高(规则驱动) |
低(硬编码) |
中(需重新部署) |
| 热部署 |
✅ 支持 |
❌ 需要发版 |
✅ 支持 |
| 脚本支持 |
✅ 多种语言 |
❌ 无 |
⚠️ 有限支持 |
| 适用场景 |
复杂业务逻辑编排 |
简单流程 |
审批流转 |
| 性能 |
高(8.6 万+ TPS) |
取决于实现 |
中(有状态机开销) |
| 国产支持 |
✅ 国产 |
N/A |
⚠️ Flowlong 国产 |
总结
LiteFlow 把复杂业务逻辑从"面条代码"变成了"搭积木",改流程不再动全身,尤其适合那些业务规则频繁变化、步骤多且有并行需求的系统。
脚本组件性能:v2.15.3 版本把 Java 脚本编译速度提升了 200 倍,主要是因为该版本对 Liquor[2] 批量编译特性的支持。Liquor 是一款源自 Arthas 核心、支持 "jar in jar" 且轻量的 Java 动态编译与脚本工具,能让开发者在运行时以接近原生的性能灵活执行 Java 代码。
适合人群:
-
饱受
if-else嵌套困扰的后端开发者 -
需要频繁调整业务流程的系统(电商、金融、风控)
-
想把业务逻辑从代码里剥离出来的架构师
使用建议:
-
先从一个简单的流程开始,别一上来就搞最复杂的
-
组件拆分要合理:每个组件只做一件事,做好一件事
-
规则文件记得做版本管理,出了问题好回滚
-
如果用脚本组件,建议用 Java 脚本(
liteflow-script-javax-pro),性能最好
GitHub 地址:https://gitee.com/dromara/liteFlow
👉 欢迎加入小哈的星球,你将获得: 专属的项目实战(多个项目) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
-
新项目:《Spring AI 项目实战》正在更新中..., 基于 Spring AI + Spring Boot 3.x + JDK 21;
-
《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17..., 点击查看项目介绍;演示地址:http://116.62.199.48:7070/
-
《从零手撸:前后端分离博客项目(全栈开发)》 2期已完结,演示链接:http://116.62.199.48/;
-
专栏阅读地址:https://www.quanxiaoha.com/column
截止目前,累计输出 100w+ 字,讲解图 4013+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,解锁全部项目,已有4200+小伙伴加入


1. 我的私密学习小圈子,从0到1手撸企业实战项目~ 2. 面试官:为什么不能用浮点数表示金额? 3. 如何设计一个扛住千万级流量的系统? 4. 面试官:BigDecimal 和 Long 哪个表示金额更合适,怎么选择?
最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。 获取方式:点“在看”,关注公众号并回复 Java 领取,更多内容陆续奉上。PS:因公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。 点“在看”支持小哈呀,谢谢啦
更多推荐

所有评论(0)