
提出问题
在有些项目中存在大量经常变化的规则逻辑,比如审核、风控规则。
如果规则硬编码在 Java 代码中,每次修改规则都要重新修改代码、测试、重启发布,很麻烦。
解决思路
- 从 JDK6 开始,Java 提供了 ScriptEngine 接口,支持执行解释性语言,例如 Javascript。使得可在 Java 代码中执行 Javascript 代码。
- ScriptEngine 提供了 eval 方法,可执行传入的 Javascript 字符串或流形式的代码块。
- 这样,整个 Script 脚本就相当于配置文件独立于代码之外。我们可以将其保存在配置中心、数据库或 Zookeeper 中,方便及时响应业务变化。
示例
下面举个简单的例子(深圳小汽车摇号政策)
新建 rool.js 脚本文件,里面维护具体的规则逻辑。
1 | // 定义因子 |
Java 代码执行 rool.js
1 | String js = FileUtils.readFileToString(new File("D:/rool.js")); // 读取脚本。 |