业务场景
我们都会碰到这样的情况,某某用户临时又增加新的校验规则需求,但是需求又很碎很急,没法等到下一个版本上线(想打人有木有),这种时候如果为了上线该改动需要重启服务,修改代码,除了增加开发工作量以外还增大了服务运维风险。我们当然可以使用类似weblogic之类支持热部署的服务器,但是这对大部分公司显然不适用。
如果这个时候能够将代码逻辑配置到数据库中,让运维人员编写简单的逻辑即可满足需求而不需要大动干戈岂不是极好?所以这里我引入了luaj脚本这一概念。
技术介绍
lua是一种轻量级、支持交互式式编程的脚本语言,在redhat、centos中都有自带。
luaj即为LuaJavaBridge,提供与Java互相嵌入的支持。
交互调用
判断规则仍然利用lua语言实现,存入数据库中,java首先从数据库中读出判断脚本然后利用luaj ScriptEngineManager执行脚本,脚本中接受从java传入的json字符串参数,调用第三方lua解析为json对象,进行逻辑判断后返回结果(json字符串)。在luaj中只能使用.lua文件,无法调用.so的C库。
业务场景是根据不同的产品类型(测试列子一对一)获取对应的校验规则脚本,并执行脚本。
一、maven依赖
<!-- luaj -->
<dependency>
<groupId>org.luaj</groupId>
<artifactId>luaj-jse</artifactId>
<version>3.0.1</version>
</dependency>
二、建立规则表
规则表 t_test_rule
CRE