前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java动态脚本运用

Java动态脚本运用

原创
作者头像
花落花相惜
发布2021-12-15 14:33:39
1.3K0
发布2021-12-15 14:33:39
举报
文章被收录于专栏:花落的技术专栏

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

2.1 动态编译执行Java代码

2.2 通过Java脚本引擎执行不同类型的脚本

  • JavaScript
  • Groovy
  • Python
  • Lua
  • Ruby
  • Scala

以上脚本语言可根据项目实际需求、对不同脚本语言的掌握情况出发进行选择。

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

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

3.1 规则引擎

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

分离商业决策者的商业决策逻辑和应用开发者的技术决策

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

3.2 计算/表达式引擎

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

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

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

  • 逻辑和数据隔离
  • 可扩展性高
  • 可维护性高
  • 知识集中化
  • 提高业务灵活性
  • 业务透明度增强
  • 减少系统频繁迭代升级风险
  • 简化系统架构

5. 使用动态脚本常见的问题及解决方案

5.1. 安全问题

  • 提供常见的脚本文件供用户选择(系统提供的脚本文件更规范、更安全、性能更好)
  • 设置脚本编写规范及模板
  • 对用户提交的脚本做健康检查(如对Threadreflecttruncate等关键词进行检查,做提示确认或拒绝通过)
  • 对脚本进行版本管理,可对脚本做回滚处理
  • 对脚本设置审核机制
  • 可根据实际情况考虑是否对用户的脚本执行进行进程或线程隔离

5.2 OOM问题

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 2. Java动态脚本常见的实现方式
    • 2.1 动态编译执行Java代码
      • 2.2 通过Java脚本引擎执行不同类型的脚本
      • 3 进阶:规则引擎&计算/表达式引擎
        • 3.1 规则引擎
          • 3.2 计算/表达式引擎
          • 4. 使用动态脚本及上述引擎的优点
          • 5. 使用动态脚本常见的问题及解决方案
            • 5.1. 安全问题
              • 5.2 OOM问题
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档