分享

Java动态执行计算表达式利器 -- ScriptEngine

 贾朋亮博客 2015-08-18

在通过配置文件对系统进行参数配置时,有时需要更好的理解参数值的具体意义,往往采用计算表达式的方式设置,例如1天换成秒数为86400,如果写成24 * 60 * 60就很清晰的表达是一天的秒数。但是这个表达式通过properties的方式获取为字符串,这里就需要动态计算这个表达式。

    ScriptEngine这个对象专门用来处理动态执行表达式,主要调用其eval方法动态执行(类似于javascript中的eval方法),其返回结果为object对象;针对计算表达式的返回结果是double类型,所以这里先将object转换为double,然后根据实际需要进行强制转换。

配置文件如下:

#标准缓存时长(单位:秒)
#默认为1天(24 * 60 * 60),也可以为86400
std_cache_time_out=24 * 60 * 60

其用法如下:

<dependency>
    <groupId>net.fortytwo.ripple</groupId>
    <artifactId>ripple-scriptengine</artifactId>
    <version>1.2</version>
</dependency>

ScriptEngineManager _mgr = new ScriptEngineManager();
//这里只调用javascript执行器,可以执行javascript脚本,除此之外还可以调用其他类型的脚本
ScriptEngine _enginer = _mgr.getEngineByName("javascript");
try{
   String  expression = properties.getProperty("std_cache_time_out");
   Object result = _enginer.eval(expression);
    _MAX_CACHE_TIME_OUT = (long)Double.parseDouble(result.toString());
   }
  }catch(ScriptException e){
       e.printStackTrace();
  }

    以ScriptEngine这个接口提供的方法请参阅ScriptEngine使用API

本文出自 “好记性不如烂笔头” 博客,请务必保留此出处http://gytian.blog.51cto.com/1065457/1604847

Java动态执行计算表达式利器 -- ScriptEngine


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约