在开发过程中,我们常常会遇到这样的场景:业务规则常常变化,但代码却需要保持稳定。列如,电商网站的促销规则、金融系统的风控策略、或者企业内部的审批流程。如果每次规则变更都需要重新编译和部署应用,那将是一个巨大的负担。
今天,为大家介绍一个优秀的开源解决方案——QLExpress4,一个轻量级、高性能的Java规则引擎,它能让你的业务规则像配置一样灵活可变。

简单来说,规则引擎就是一种能够将业务规则与代码逻辑分离的工具。它允许你在不修改代码的情况下,通过配置规则来改变应用的行为。
想象一下,你不需要每次修改促销规则时都重新部署整个应用,而是只需更新一条规则配置,系统就能自动应用新的规则。

QLExpress4是阿里巴巴开源的一款Java规则引擎,它专注于轻量级、高性能和易用性。与传统规则引擎相比,QLExpress4的体积更小,学习曲线更平缓,特别适合需要频繁调整业务规则的场景。
主要特点
让我们来看看QLExpress4能做什么:
1. 表达式计算
// 简单的表达式计算
String expression = "a + b * c";
Map<String, Object> context = new HashMap<>();
context.put("a", 1);
context.put("b", 2);
context.put("c", 3);
Object result = QLExpressRunner.execute(expression, context);
System.out.println(result); // 输出72. 条件判断
// 条件判断表达式
String expression = "if(a > b, 'a大于b', 'a小于等于b')";
Map<String, Object> context = new HashMap<>();
context.put("a", 10);
context.put("b", 5);
Object result = QLExpressRunner.execute(expression, context);
System.out.println(result); // 输出"a大于b"3. 自定义函数
// 自定义函数
public class MyFunction {
public static int doubleValue(int value) {
return value * 2;
}
}
// 注册自定义函数
QLExpressRunner runner = new QLExpressRunner();
runner.addFunction("double", MyFunction.class, "doubleValue", new Class[]{int.class});
// 使用自定义函数
String expression = "double(5)";
Object result = runner.execute(expression, null);
System.out.println(result); // 输出10QLExpress4可以应用在许多场景中:
1. 电商促销规则
// 促销规则:满200减50,且会员享受额外95折
String promotionRule = "if(totalAmount >= 200, totalAmount - 50, totalAmount) * (isMember ? 0.95 : 1)";
// 通过传入totalAmount和isMember的值,动态计算最终价格2. 金融风控系统
// 风控规则:信用评分低于600且贷款金额超过10万,拒绝申请
String riskRule = "if(creditScore < 600 && loanAmount > 100000, '拒绝', '通过')";3. 工作流引擎
// 审批流程:部门经理审批通过后,总经理再审批
String workflowRule = "if(deptManagerApproved, '进入总经理审批', '拒绝')";相比其他规则引擎,QLExpress4有以下几个优势:
要使用QLExpress4,只需在项目中添加依赖:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>QLExpress</artifactId>
<version>4.0.0-beta.8</version>
</dependency>然后就可以像上面的例子一样,开始编写和执行规则表达式了。
QLExpress4是一个轻量级、高性能的Java规则引擎,它让业务规则的动态调整变得简单。通过将规则与代码分离,你可以快速响应业务变化,而无需频繁地修改和部署应用。Github开源地址是
https://github.com/alibaba/QLExpress/tree/v4.0.0-beta.8
