各类Java动态脚本、规则引擎、计算/表达式引擎简介

1. 常见的需求场景

在日常的Java项目中,我们免不了会遇到这样的需求:

  1. 动态地获取并运行自定义脚本文件,以实现特定的功能;
  2. 对数据流执行用户自定义的数据有效性、公式计算、数据处理ETL(如数据截取、拼接)等不同业务逻辑;
  3. 对用户输入的代码或脚本文件进行测试、运行,确保其语法正确、功能正常;
  4. 处理需要灵活配置且不断变更的动态业务规则;
  5. 代码的热更新、热修复;

诸如此类的需求若采用硬编码实现,则迭代成本相当高,每次改动都需要进行开发、测试、部署,同时业务规则的频繁变更会导致代码的开发和维护成本大大提高。这时,就需要选择一个合适的Java动态脚本、规则引擎或计算/表达式引擎等来快速满足这些需求,可以大大减少我们的工作量,提高开发效率。

各类Java动态脚本、规则引擎、计算/表达式引擎简介_第1张图片

2. Java动态脚本常见的实现方式

动态编译执行Java代码,通过Java脚本引擎执行不同类型的脚本。

Java执行动态脚本的过程往往会产生很多对象,而同一个脚本没必要每次执行时都去获取、编译、执行。可设计缓存策略,对编译后的脚本引擎进行缓存,既可避免频繁创建对象引起的内存溢出问题,又可提高性能。

  • JavaScript

  • Groovy

  • Python

  • Lua

  • Ruby

  • Scala

一般的需求可使用上述动态脚本来实现,但是如果遇到业务规则更为复杂、规模更大、对功能和性能有更高要求的需求时,则考虑更为专业的规则引擎和计算/表达式引擎。

各类Java动态脚本、规则引擎、计算/表达式引擎简介_第2张图片

3 进阶:规则引擎&计算/表达式引擎

3.1 规则引擎

        所谓规则引擎是由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。规则引擎接受数据输入,解释业务规则,并根据业务规则做出业务决策。常见的规则引擎有:

  • Drools(推荐)
  • OpenRules
  • EasyRules
  • OpenL Tablets
  • RuleBook
  • Esper

3.2 计算/表达式引擎

表达式(布尔组合)、特殊数学公式计算(高精度)、语法分析、脚本二次定制

  • Fel
  • OGNL
  • Mvel
  • SpEL
  • JEXL
  • JSEL
  • Aviator
  • Expression4j
  • QLExpress

各类Java动态脚本、规则引擎、计算/表达式引擎简介_第3张图片

4. 使用动态脚本及上述引擎的优点

  • 逻辑和数据隔离
  • 可扩展性高,对脚本设置审核机制,设置脚本编写规范及模板
  • 可维护性高,对用户提交的脚本做健康检查
  • 知识集中化,提供常见的脚本文件供用户选择
  • 提高业务灵活性,对脚本进行版本管理,可对脚本做回滚处理
  • 业务透明度增强,减少系统频繁迭代升级风险
  • 简化系统架构,可根据实际情况考虑是否对用户的脚本执行进行进程或线程隔离

    以上很简明扼要的罗列了Java动态脚本、规则引擎、计算/表达式引擎的一些内容,更多了解和使用请到ava动态脚本、规则引擎、计算/表达式引擎专题。

你可能感兴趣的:(java,开发语言)