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

    在通过配置文件对系统进行参数配置时,有时需要更好的理解参数值的具体意义,往往采用计算表达式的方式设置,例如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

其用法如下:

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

你可能感兴趣的:(java,ScriptEngine,动态执行表达式)