表达式计算引擎-JEP
最近调整了原先的一个中间件的功能,把之前被产品去掉的规则表达式计算又重新添了回去.
这个中间件的基本功能是使用预定义的关键字和数值比对进行判断,从大量的数据中生成告警,主要是用于服务器监控.
这里的表达式计算仅使用了与逻辑相关的一些运算符.
原本是自己写了一个基于stack的表达式计算,后来被产品去掉了这个功能,说是用不到这种…然而这次的需求需要进行复杂的多规则计算,因此需要在现有的基础上重新添加回表达式计算功能.
为以后扩展起见,原本是使用java自带的js引擎进行计算,然而在实现了之后,自测性能时发现内存占用率过高.
后续找了一下开源的表达式计算引擎,话说网上能找到的计算引擎介绍全部都是一样的…后面试了几个,最终选择了JEP
,效率和内存占用都比较符合要求.
介绍一下简单的使用
由于JEP在maven上有很多实现,试过了几个后选择了
<dependency><groupId>com.singularsys</groupId><artifactId>jep</artifactId><version>3.5</version>
</dependency>
引擎本身支持数学运算,但我只使用了其逻辑运算的一部分
String exp = "a&&(b||c)";
Jep jep=new Jep();
jep.parse(exp);
jep.addVariable("a",true);
jep.addVariable("b",true);
jep.addVariable("c",true);
jep.evaluate();
使用方式非常简单
- 构造Jep
- 解析表达式字符串
- 给表达式中的变量赋值
- 计算
需要注意的是给变量赋值的操作是可以重复进行的.不要重复解析表达式.
doc文档看这里
<http://www.singularsys.com/jep/doc/html/index.html>
表达式计算引擎-JEP相关推荐
- Fel表达式计算引擎学习 侵删
Fel的问题 Fel的问题 Fel是轻量级的高效的表达式计算引擎 Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是开放的,引擎执行中的多个模块都可以扩展或替换.Fel ...
- Fel表达式计算引擎学习
载原文地址:Fel是轻量级的高效的表达式计算引擎 Fel的问题 Fel的问题 Fel是轻量级的高效的表达式计算引擎 Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是开 ...
- Fel表达式计算引擎
一.Fel表达式计算引擎介绍 Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是开放的,引擎执行中的多个模块都可以扩展或替换.Fel的执行主要是通过函数实现,运算符(+ ...
- Fel轻量高效的表达式计算引擎
Fel是轻量级的高效的表达式计算引擎 Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是开放的,引擎执行中的多个模块都可以扩展或替换.Fel的执行主要是通过函数实现,运 ...
- 【Fel】Fel表达式计算引擎
1.概述 Fel是轻量级的高效的表达式计算引擎. Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是开放的,引擎执行中的多个模块都可以扩展或替换.Fel的执行主要是通过 ...
- 史上最为高效的表达式计算引擎Fel
花满天的季节 盼望着,盼望着,三月悄然来了. 一切都像刚睡醒的样子,犹如婴儿缓缓睁眼. 粉粉嫩嫩的花儿开始羞涩起来, 沉闷程序猿小哥哥开始躁动起来 小E也带着小妹妹悠悠公园深处. 万物生长 桃花运来了 ...
- Fel是轻量级的高效的表达式计算引擎学习(一)
Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是开放的,引擎执行中的多个模块都可以扩展或替换.Fel的执行主要是通过函数实现,运算符(+.-等都是Fel函数),所有这 ...
- java fel_Fel是轻量级的高效的表达式计算引擎
Fel有多快? 通常情况下,Fel-0.7每秒可以执行千万次表达式(不包含编译时间).速度是Jexl-2.0的20倍以上. 目前还没有发现开源的表达式引擎比Fel快. 为何要使用Fel? Fel语法和 ...
- 【Janino】Janino Java表达式计算引擎 案例
文章目录 1.官方介绍 2.代码示例 1.官方介绍 当Apache Spark.Apache Flink.Presto为了加速数据处理速度,而使用"代码生成"技术时,都不约而同的选 ...
- expr4j 表达式计算
1 expr4j 简介 Expression Calculation Engine for Java :java表达式计算引擎 2 expr4j 下载地址 https://www.objecthunt ...
最新文章
- iOS load方法和initialize方法的异同
- .NET 正则表达式’$’符号的使用
- USB学习5---android usb驱动源代码目录说明
- 时间服务器+注册表,注册表缺失导致Windows Server 2008 R2时钟服务W32time不能自启
- python分段线性插值_Python实现分段线性插值
- 我们大学的第一桶金!!(更新中。。。)
- 用windbg调试程序与windbg命令的使用
- gom引擎没有和账号服务器连接,GOM引擎和GEE引擎的传奇版本配置登录界面黑屏的原因和解决办法...
- mac制作u盘启动盘
- STM32F103_study55_The punctual atoms(STM32 PWM output experimental theoretical knowledge)
- 写的一个58获取房东手机号,爬虫,奈何号码都是加密,练手用
- python自动输入文字_Python自动输入【新手必学】
- 鼠标指针下总出现一个滚动条似的方框,怎么办?有图
- 使用 matplotlib绘制简单图形,保存图片的方法
- 访问者模式 Visitor
- c语言实现getline函数
- 普及下病毒性感冒和细菌性感冒的区别(如何看血常规)
- python+vue+elementui花卉种植技术网站
- 模式识别更接近计算机还是自动化,2020中科院自动化所考研初试经验
- ThingsBoard——v3.3.3源码编译