java jexl 工具类_jexl表达式解析、计算工具类.md
jexl表达式解析、计算工具类.md 根据表达式可以动态反向解析出变量;适合动态表达式,参数未知场景 如 (A0.2+B0.8)/C 解析出 A\B\C,把ABC参数值代入计算 初始化引擎
private static final JexlEngine ENGINE = new JexlEngine();
static {
ENGINE.setCache(512);
ENGINE.setLenient(false);
ENGINE.setSilent(false);
}
解析出表达式中的变量 ExpressionUtils
package com.its.cloud.utils;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import org.apache.commons.jexl2.Expression;
import org.apache.commons.jexl2.ExpressionImpl;
import org.apache.commons.jexl2.JexlEngine;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collections;
import java.util.List;
import java.util.Set;
/**
* Created by hongliangpan@gmail.com on 2015/1/19.
*/
public class ExpressionUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(ExpressionUtils.class);
private static final JexlEngine JEXL = new JexlEngine();
static {
JEXL.setCache(512);
JEXL.setLenient(false);
JEXL.setSilent(false);
}
public static JexlEngine getJexlEngine() {
return JEXL;
}
public static boolean isValidExpression(String expression) {
try {
JEXL.createExpression(expression);
return true;
} catch (Throwable t) {
LOGGER.error("表达式{}配置错误{}。", expression, t.getMessage(), t);
return false;
}
}
/**
* 获取表达式中的变量参数
*
* @param expression 表达式,如 ping.max>0 and ping.min>0 and pin.lost==0
*/
public static List getVariables(String expression) {
Expression exp;
try {
exp = JEXL.createExpression(expression);
} catch (Throwable t) {
LOGGER.error("表达式{}配置错误{}。", expression, t.getMessage(), t);
return Collections.emptyList();
}
return getVariables(exp);
}
public static List getVariables(Expression exp) {
List metricDefIds = Lists.newArrayList();
Set> variables = JEXL.getVariables((ExpressionImpl) exp);
for (List var : variables) {
metricDefIds.add(Joiner.on(".").join(var));
}
return metricDefIds;
}
}
解析变量,调用示例
jexl反向解析表达式中的变量
JexlEngine jexl = new JexlEngine();
String threshold = "(value==3)and (cpu>90 and mem <70)";
Expression exp = jexl.createExpression(threshold);
List variables = jexl.getVariables(((ExpressionImpl)exp));
表达式示例
String threshold = "value>90";
Expression exp = getJexlEngine().createExpression(threshold);
JexlContext jc = new MapContext();
jc.set("value", data.getValue());
Object evaluate = exp.evaluate(jc);
if (evaluate instanceof Boolean) {
return (boolean) evaluate;
} else {
LOGGER.error("表达式错误{},不是boolean返回值;{}", exp, rule);
return false;
}
java jexl 工具类_jexl表达式解析、计算工具类.md相关推荐
- Java 8流和Lambda表达式–解析文件示例
最近,我想从输出日志中提取某些数据. 这是日志文件的一部分: 2015-01-06 11:33:03 b.s.d.task [INFO] Emitting: eVentToRequestsBolt _ ...
- java世界中几种html解析的工具
HTML分析是一个比较复杂的工作,Java世界主要有几款比较方便的分析工具: 1.Jsoup Jsoup是一个集强大和便利于一体的HTML解析工具.它方便的地方是,可以用于支持用jquery中css ...
- 电商、母婴类APP实例解析!垂直类社区应该这么“玩”!
2015年11月,[友盟+]微社区刚上线,垂直行业主要集中在电商.母婴.游戏三个领域,半年过去了,社区用户遍布教育.医疗.社交.阅读.资讯等各个行业!在粉丝经济大热的移动互联网时代,我们在各个领域都看 ...
- templatespider_v2.2 扒网站工具软件下载(含模版计算工具)
介绍 将要扒取的网站页面的网址粘贴进去 点击左下方"开始抓取"按钮 等待抓取完毕,自动打开下载好的文件夹 下载链接 http://www.bytepan.com/cbWyWDJF6 ...
- Crontab中文表达式解析
简介 最近工作中在使用调度框架,经常和定时表达式打交道,并且有查看表达式中文解释的需求,于是在网上搜集资料和自己进行一定的修改,写了一个Crontab表达式解析的工具类 详解 这个没啥好解释,看资料, ...
- C# CAD二次开发——建筑结构墙体线荷载计算工具开发(一)
前言: 本人是一名建筑设计公司的结构设计人员,建筑业的势头显然没有前些年那般波涛汹涌.浪潮暂退的今天很多向我这样的结构设计从业人员倍感迷茫.行业沉寂的这些日子里我不断探索,希望在减隔震.BIM.钢结构 ...
- 【Java工具类】学会MVEL2.0,表达式解析再不怕
文章目录 常见的表达式引擎 一.什么是MVEL? 二.快速入门 三.语法 1.基本语法 1.1 简单属性表达式 1.2 布尔表达式 1.3 复合语句表达式 1.4 返回值 2. 操作符 2.1 一元操 ...
- java 兼容excel_Java解析Excel工具类(兼容xls和xlsx)
依赖jar org.apache.poi poi-ooxml 4.0.1 ExcelUtils.java package javax.utils; import java.io.File; impor ...
- java json帮助类_java 写一个JSON解析的工具类
上面是一个标准的json的响应内容截图,第一个红圈"per_page"是一个json对象,我们可以根据"per_page"来找到对应值是3,而第二个红圈&quo ...
最新文章
- PowerBI随笔(5)-关系模型与报表-2
- B. Box Fitting
- [机器学习-Sklearn]K-means(K均值)学习与总结
- 把dataset作为一个xml文件传给客户端
- 验证码图片 java_验证码图片
- CCF NOI1139 高精度减法
- easyui自学模板代码
- excel表格如何设置双面打印的方法
- 极值波延拓matlab函数,函数极值是什么意思
- 微型计算机上的tab作用,TAB键有什么用处
- react-native 关闭黄色警告
- 热爱,对待人生的首要态度
- uni-app学习 style样式和三元运算符用法(三)
- vmware安装ubuntu Intel VT-x 处于禁用状态
- ArcMap-network analyst
- CAD——MV视口与图层
- PCF文件管道信息解析
- 2.格式化输出与输入
- 使用VSccde上传文件到Git时报错:fatal:Custom certificate bundle not found at path: F:/python错图墩铝?git娴狂球糕减裱镑勒惊/Gi
- Java流程控制(一)
热门文章
- django模型查询_如何在Django中编写有效的视图,模型和查询
- 数据结构链表代码_代码简介:链表数据结构如何工作
- 小程序 redux_Redux应用程序最重要的ESLint规则
- firstchild.data与childNodes[0].nodeValue意思
- oracle怎么判断地址相似,如何查看oracle数据文件的地址
- Elipse 、Idea配置 Java-Code-Formatter
- 【CCF】201612-1中间数
- 『ExtJS』表单(一)常用表单控件及内置验证
- Ext.data-GroupingStore/JsonStore/SimpleStore
- 提示word损坏,需文本恢复转换器的解决两方法