你有没有接过那种祖传代码?一个几千行的 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);

同理定义其他组件(checkStockcalcPriceriskChecksaveOrder)。

执行流程

@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 这类工作流引擎的事),但它适合处理审批环节里的业务逻辑

比如一个采购审批,需要:

  1. 校验采购金额是否超预算

  2. 并行查询供应商库存和价格

  3. 根据金额走不同的风控规则

  4. 生成采购单

这些逻辑用 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:因公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。
点“在看”支持小哈呀,谢谢啦
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐