美文网首页
Java脚本引擎实现规则可配置化

Java脚本引擎实现规则可配置化

作者: 张振伟 | 来源:发表于2018-06-07 10:40 被阅读353次

Java脚本 规则引擎

提出问题

  • 在有些项目中存在大量经常变化的规则逻辑,比如审核、风控规则。
  • 如果规则硬编码在Java代码中,每次修改规则都要重新修改代码、测试、重启发布,很麻烦。

解决思路

  • 从JDK6开始,Java提供了ScriptEngine接口,支持执行解释性语言,例如Javascript。使得可在Java代码中执行Javascript代码。
  • ScriptEngine提供了eval方法,可执行传入的Javascript字符串或流形式的代码块。
  • 这样,整个Script脚本就相当于配置文件独立于代码之外。我们可以将其保存在配置中心、数据库或Zookeeper中,方便及时响应业务变化。

示例

下面举个简单的例子(深圳小汽车摇号政策)

新建rool.js脚本文件,里面维护具体的规则逻辑。

// 定义因子
var
    RESIDE_CITY, // 居住地
    HAS_DRIVER_LICENSE, // 是否有C以上驾照
    HAS_CAR, // 是否有本地小汽车
    o;

// 定义规则函数
function doRool() {
    if (RESIDE_CITY != '440300') {
        return "非本地居住";
    }
    
    if (HAS_DRIVER_LICENSE != 'Y') {
        return "无C以上驾照";
    }
    
    if (HAS_CAR != 'N') {
        return "本地已有小汽车";
    }
    
    return ""; // 没有被拦截。
}

// 执行规则
doRool();

Java代码执行rool.js

String js = FileUtils.readFileToString(new File("D:/rool.js")); // 读取脚本。

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");

// 向脚本传递参数
engine.put("RESIDE_CITY", "440300");
engine.put("HAS_DRIVER_LICENSE", "Y");
engine.put("HAS_CAR", "Y");

// 执行并打印
System.out.println(engine.eval(js));

>:本地已有小汽车

相关文章

  • Java脚本引擎实现规则可配置化

    Java脚本 规则引擎 提出问题 在有些项目中存在大量经常变化的规则逻辑,比如审核、风控规则。 如果规则硬编码在J...

  • 根据传入参数不同调用不同的方法:规则引擎重构

    抽象规则 实现规则AddRule.java 其它略 其中:返回结果 表达式 规则引擎RuleEngine.java...

  • 企业微信云控自动化加人技术思路分享

    云控自动化技术架构 可基于android 无障碍实现脚本引擎(规避风险),也可以通过hook实现(功能更强大) n...

  • Springboot整合Urule

    摘要: Urule决策引擎可简化开发校验、决策类代码,底层由java语言实现,可基于SpringBoot快速配置,...

  • Drools介绍(1)

    Drools简介 Drools是一款基于Java的开源规则引擎,将规则与业务代码解耦。规则以脚本的形式存储在一个文...

  • drools 6.4

    一. 简介 Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的...

  • Java 动态特性三:脚本引擎

    java脚本引擎介绍: 使得java应用程序可以通过一定的接口与各种脚本引擎交互,从而达到在java平台上调用各种...

  • 规则引擎框架

    Java各种规则引擎AviatorDroolsEasyRulesRuleBookIKexpressionMVELJ...

  • 【Ansible入门1】

    Ansible介绍 Ansible是一款使用Python语言开发实现的开源软件,它一个简单的自动化引擎,可完成配置...

  • Groovy脚本实现轻量级规则引擎

    对于业务复杂多变的项目存在的问题 1) 当业务规则变更时,对应的代码也得跟着更改,每次即使是小的变更都需要经历开发...

网友评论

      本文标题:Java脚本引擎实现规则可配置化

      本文链接:https://www.haomeiwen.com/subject/gygwsftx.html