QLExpress
QLExpress is a powerful, lightweight, dynamic language for the Java platform aimed at improving developers’ productivity in different business scenes.
应用场景
- 对于不可知的场景,比如风控点编写。
如果全部使用代码编写,调整起来将变得十分麻烦。
- EAV 数据库模式,原始信息的处理
可以将 QLExpress 与 Eav 数据库模式结合起来,使得功能变得强大灵活。
编写此系列博客的目的
-
系统学习下 QLExpress,而不是局限于简单的使用。
-
官方
README.md
写的有些瑕疵 -
便于以后拓展+回顾
快速开始
jar 的引入
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>QLExpress</artifactId>
<version>3.2.0</version>
</dependency>
入门案例
import com.ql.util.express.DefaultContext;
import com.ql.util.express.ExpressRunner;
import org.junit.Assert;
import org.junit.Test;
public class HelloWorldTest {
@Test
public void helloTest() throws Exception {
ExpressRunner runner = new ExpressRunner();
DefaultContext<String, Object> context = new DefaultContext<>();
context.put("a", 1);
context.put("b", 2);
String express = "a+b";
Object r = runner.execute(express, context, null, true, false);
Assert.assertEquals(3, r);
}
}
拓展总结
整体架构
调用方法入参
/**
* 执行一段文本
* @param expressString 程序文本
* @param context 执行上下文,可以扩展为包含ApplicationContext
* @param errorList 输出的错误信息List
* @param isCache 是否使用Cache中的指令集,建议为true
* @param isTrace 是否输出详细的执行指令信息,建议为false
* @param aLog 输出的log
* @return
* @throws Exception
*/
Object execute(String expressString, IExpressContext<String,Object> context,List<String> errorList, boolean isCache, boolean isTrace, Log aLog);
isTrace
/**
* 是否输出所有的跟踪信息,同时还需要log级别是DEBUG级别
*/
private boolean isTrace = false;
这个主要是是否输出脚本的编译解析过程,一般对于业务系统来说关闭之后会提高性能。
我们将上面的执行中 isTrace
属性设置为 true。日志结果如下:
DEBUG [main] - LoadAttr:a:1
DEBUG [main] - LoadAttr:b:2
DEBUG [main] - +(a:1,b:2)