java结合luaj实现服务中执行动态脚本

业务场景

我们都会碰到这样的情况,某某用户临时又增加新的校验规则需求,但是需求又很碎很急,没法等到下一个版本上线(想打人有木有),这种时候如果为了上线该改动需要重启服务,修改代码,除了增加开发工作量以外还增大了服务运维风险。我们当然可以使用类似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

CREATE TABLE `t_test_rule` (
  `shell` varchar(5000) NOT NULL COMMENT 'lua脚本',
  `set_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  `id` int(11) NOT N
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值