大家好,我是 Guide。今天来推荐一款非常优秀的国产规则引擎,说不定你曾经就用过。下面是正文。
你有没有接过那种祖传代码?一个几千行的 if-else 堡垒,改一行逻辑,要测半天。更糟的是,业务方今天说要"先 A 后 B",明天又改成"A 和 B 并行,等 C 完成再接 D",每次改流程都要重构代码。
LiteFlow 是一个国产规则引擎,专门解决"业务逻辑耦合"问题。它把瀑布流式的代码拆成一个个独立组件,用一套 DSL 语法重新编排,改流程就像搭积木。

解决了什么问题?
传统复杂业务系统的痛点:
- 改一处动全身:代码里到处是硬编码的流程判断,改个顺序要改好几个地方。
- 难以热变更:业务流程调整需要重新发版,没法实时生效。
- 组件复用难:每个业务场景都写一套逻辑,同样的代码在到处复制。
LiteFlow 的核心思路是 "工作台模式" :想象一个工厂流水线,n 个工人围着工作台,每个人只负责自己那道工序,完成就把半成品放回工作台,下一个人接着做。工人之间不需要沟通,只需要关心自己手头的活和工作台上的资源。
映射到代码世界:工人就是组件,工作台就是上下文,工序顺序就是规则配置。

下图是 LiteFlow 官方文档对核心能力(组件编排、实时热更替和复用)的图解:

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 可视化编排界面,拖拽就能设计流程。
- 自带简单监控:框架内自带一个命令行的监控,能够知道每个组件的运行耗时排行。
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 年度开源项目评选中获得了基础软件赛道第二名的成绩。

快速上手
安装
xml
<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 里指定规则文件位置:
properties
liteflow.rule-source=config/flow.el.xml
然后在 resources/config/flow.el.xml 定义规则 THEN(validateOrder, WHEN(checkStock, calcPrice), riskCheck, saveOrder);:
xml
<?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定义组件:
java
@LiteflowComponent("validateOrder")
public class ValidateOrderCmp extends NodeComponent {
@Override
public void process() {
// 从上下文获取订单数据
OrderContext context = this.getContextBean(OrderContext.class);
Order order = context.getOrder();
// 校验逻辑
if (order.getAmount() <= 0) {
throw new IllegalArgumentException("订单金额必须大于0");
}
// 把结果放回上下文,供后续组件使用
context.setValid(true);
}
}
@LiteflowComponent:复合注解,将类声明为 Spring 的 Bean,并给组件起一个 ID(validateOrder),这个 ID 必须与 XML 文件中的名称对应。getContextBean:LiteFlow 处理数据的精髓,流程中的所有组件共享一个(或多个)上下文对象,避免在方法间传递大量参数,实现逻辑解耦。
LiteFlow 在 v2.8.0 后支持多上下文,在执行的时候同时初始化你传入的多个上下文。在组件里也可以根据 class 类型很方便的拿到。
java
// 传入
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)。
执行流程
java
@Service
public class OrderService {
@Resource
private FlowExecutor flowExecutor;
public void createOrder(Order order) {
LiteflowResponse response = flowExecutor.execute2Resp(
"orderChain",
order, // 将数据作为初始参数
OrderContext.class // 让 LiteFlow 自动实例化上下文
);
}
}
《SpringAI 智能面试平台+RAG 知识库》配套实战项目教程正在更新,涉及到 Prompt Engineering、大模型集成、RAG(检索增强生成)、高性能对象存储与向量数据库。后续的话,还会同步上 Agent 项目。
内容非常全面,非常适合想要实战 AI 项目或者准备 AI 大模型应用开发岗位面试的朋友,来一张刚写完的3.4w 字+35 道题目 的 RAG 面试题总结,大家感受一下(点此链接了解: 星球):

使用场景
场景一:电商价格引擎
电商的价格计算通常涉及多个维度:原价、会员折扣、优惠券、满减活动、店铺优惠等。用 LiteFlow 可以把每个计算因子拆成独立组件,用规则灵活组合。
规则示例:
xml
<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):按顺序执行
xml
THEN(a, b, c, d)
<!-- 或者用语义更明确的 SER -->
SER(a, b, c, d)
并行(WHEN/PAR):同时执行
xml
WHEN(a, b, c)
<!-- 或者用 PAR -->
PAR(a, b, c)
嵌套组合:
xml
THEN(
a,
WHEN(b, THEN(c, d)),
e
)
规则含义:先执行 a → 然后并行执行 b 和"先 c 后 d" → 最后执行 e。
高级特性
忽略错误(ignoreError):
xml
THEN(
a,
WHEN(b, c, d).ignoreError(true),
e
)
即使 b、c、d 中有组件报错,e 仍会执行。
任一完成则继续(any):
xml
THEN(
a,
WHEN(b, c, d).any(true),
e
)
b、c、d 中任何一个先完成,就忽略其他继续往下走。
指定必须等待的节点(must):
xml
WHEN(b, c, d).must(b, c)
b、c 必须等执行完,d 如果还没完就忽略。
按比例完成(percentage):
xml
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 批量编译特性的支持。Liquor 是一款源自 Arthas 核心、支持 "jar in jar" 且轻量的 Java 动态编译与脚本工具,能让开发者在运行时以接近原生的性能灵活执行 Java 代码。
适合人群:
- 饱受
if-else嵌套困扰的后端开发者 - 需要频繁调整业务流程的系统(电商、金融、风控)
- 想把业务逻辑从代码里剥离出来的架构师
使用建议:
- 先从一个简单的流程开始,别一上来就搞最复杂的
- 组件拆分要合理:每个组件只做一件事,做好一件事
- 规则文件记得做版本管理,出了问题好回滚
- 如果用脚本组件,建议用 Java 脚本(
liteflow-script-javax-pro),性能最好
Gitee 地址:gitee.com/dromara/lit...