Java 解析表达式
2016-07-19 15:01
1301 查看
最近项目需要用到配置表达式,然后后台解析表达式并运行得到结果,类似这种"true||true"表达式,java里自带的不支持这种,只能用java里的ScriptEngine的js引擎来执行,但是效率太慢了,跑个400万数据要几十天,太慢了,后来优化了一下也要4天,虽然快了10倍左右,但还是达不到项目要求。
String expression="true||true";
ScriptEngine s = new ScriptEngineManager().getEngineByName("js");
isPassFlag = (boolean) s.eval(expression);//运行表达式得到值
看了看代码也实在看不出哪里还可以优化了,想想只能换个能运行表达式的类库或者jar包,果然找到了其他的一些,如
String expression="true||true";
ScriptEngine s = new ScriptEngineManager().getEngineByName("js");
isPassFlag = (boolean) s.eval(expression);//运行表达式得到值
看了看代码也实在看不出哪里还可以优化了,想想只能换个能运行表达式的类库或者jar包,果然找到了其他的一些,如
IKExpression和Apache 的Jakarta Commons Jexl,前者因为在maven工程里找不到jar包,我先试了下后面的jexl,感觉速度和js引擎来执行 表达式速度没快多少。 JexlContext jexlContext = JexlHelper.createContext(); Expression expression1 = ExpressionFactory.createExpression(expression); isPassFlag = (boolean) expression1.evaluate(jexlContext); 只能忍着用导入本地jar包的方式把IKExpression导入到工程,试了下速度,400万大概8小时,比js的快10多倍。 这下可以了,哈哈 isPassFlag = (boolean) ExpressionEvaluator.evaluate(expression); pom.xml中加入: <dependency> <groupId>org.wltea.expression</groupId> <artifactId>IKExpression</artifactId> <version>2.1.2s</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/IKExpression2.1.2.jar</systemPath> </dependency> ikexpression下载:https://code.google.com/archive/p/ik-expression/downloads 官网:https://code.google.com/archive/p/ik-expression/
相关文章推荐
- 文本多于最大字数后用省略号来代替的的文字
- java 监听器实现原理
- spring boot 中使用定时器
- Spring中Quartz的配置
- Spring 注解的方式进行事务管理
- Java基础学习第二天
- Spring集成quartz任务调度框架
- Java 反射
- java文件读写操作大全
- Eclipse常用设置
- 用mvn test运行test case时,报“java.lang.OutOfMemoryError: PermGen space”
- Java动态代理(二)CGLIB动态代理应用
- springmvc3+hibernate3整合问题
- Java动态代理(一)动态类Proxy的使用
- Java逐行读写TXT文件
- Java基础知识二
- Java中equals和==的区别
- 在cmd里输入cd myclass 提示系统找不到指定路径
- java的Arrays类的应用
- Java专业术语集