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相关推荐

  1. Java 8流和Lambda表达式–解析文件示例

    最近,我想从输出日志中提取某些数据. 这是日志文件的一部分: 2015-01-06 11:33:03 b.s.d.task [INFO] Emitting: eVentToRequestsBolt _ ...

  2. java世界中几种html解析的工具

    HTML分析是一个比较复杂的工作,Java世界主要有几款比较方便的分析工具: 1.Jsoup Jsoup是一个集强大和便利于一体的HTML解析工具.它方便的地方是,可以用于支持用jquery中css ...

  3. 电商、母婴类APP实例解析!垂直类社区应该这么“玩”!

    2015年11月,[友盟+]微社区刚上线,垂直行业主要集中在电商.母婴.游戏三个领域,半年过去了,社区用户遍布教育.医疗.社交.阅读.资讯等各个行业!在粉丝经济大热的移动互联网时代,我们在各个领域都看 ...

  4. templatespider_v2.2 扒网站工具软件下载(含模版计算工具)

    介绍 将要扒取的网站页面的网址粘贴进去 点击左下方"开始抓取"按钮 等待抓取完毕,自动打开下载好的文件夹 下载链接 http://www.bytepan.com/cbWyWDJF6 ...

  5. Crontab中文表达式解析

    简介 最近工作中在使用调度框架,经常和定时表达式打交道,并且有查看表达式中文解释的需求,于是在网上搜集资料和自己进行一定的修改,写了一个Crontab表达式解析的工具类 详解 这个没啥好解释,看资料, ...

  6. C# CAD二次开发——建筑结构墙体线荷载计算工具开发(一)

    前言: 本人是一名建筑设计公司的结构设计人员,建筑业的势头显然没有前些年那般波涛汹涌.浪潮暂退的今天很多向我这样的结构设计从业人员倍感迷茫.行业沉寂的这些日子里我不断探索,希望在减隔震.BIM.钢结构 ...

  7. 【Java工具类】学会MVEL2.0,表达式解析再不怕

    文章目录 常见的表达式引擎 一.什么是MVEL? 二.快速入门 三.语法 1.基本语法 1.1 简单属性表达式 1.2 布尔表达式 1.3 复合语句表达式 1.4 返回值 2. 操作符 2.1 一元操 ...

  8. 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 ...

  9. java json帮助类_java 写一个JSON解析的工具类

    上面是一个标准的json的响应内容截图,第一个红圈"per_page"是一个json对象,我们可以根据"per_page"来找到对应值是3,而第二个红圈&quo ...

最新文章

  1. PowerBI随笔(5)-关系模型与报表-2
  2. B. Box Fitting
  3. [机器学习-Sklearn]K-means(K均值)学习与总结
  4. 把dataset作为一个xml文件传给客户端
  5. 验证码图片 java_验证码图片
  6. CCF NOI1139 高精度减法
  7. easyui自学模板代码
  8. excel表格如何设置双面打印的方法
  9. 极值波延拓matlab函数,函数极值是什么意思
  10. 微型计算机上的tab作用,TAB键有什么用处
  11. react-native 关闭黄色警告
  12. 热爱,对待人生的首要态度
  13. uni-app学习 style样式和三元运算符用法(三)
  14. vmware安装ubuntu Intel VT-x 处于禁用状态
  15. ArcMap-network analyst
  16. CAD——MV视口与图层
  17. PCF文件管道信息解析
  18. 2.格式化输出与输入
  19. 使用VSccde上传文件到Git时报错:fatal:Custom certificate bundle not found at path: F:/python错图墩铝?git娴狂球糕减裱镑勒惊/Gi
  20. Java流程控制(一)

热门文章

  1. django模型查询_如何在Django中编写有效的视图,模型和查询
  2. 数据结构链表代码_代码简介:链表数据结构如何工作
  3. 小程序 redux_Redux应用程序最重要的ESLint规则
  4. firstchild.data与childNodes[0].nodeValue意思
  5. oracle怎么判断地址相似,如何查看oracle数据文件的地址
  6. Elipse 、Idea配置 Java-Code-Formatter
  7. 【CCF】201612-1中间数
  8. 『ExtJS』表单(一)常用表单控件及内置验证
  9. Ext.data-GroupingStore/JsonStore/SimpleStore
  10. 提示word损坏,需文本恢复转换器的解决两方法