Drools5.0的xls文件转drl文件提升解析效率

  drools中,支持的常见文件类型有drl(drools的规则语言),xls,cvs,rf(规则流文件),drt(drools rule template),在简单的应用中,一般只会使用drl和xls的文件,为了方便业务人员和维护人员能够配置规则文件,一般的规则文件都是由程序员做成execl文件,这样一来,添加相关的配置就很傻瓜了。但是这样做会影响到程序运行的效率,我们做一个测试。

 

    规则文件:base.xls 包含了 rule.xls和simple.xls;在rule.xls中包括了credit.xls,为了读取credit.xls中的规则对象,则需要对base.xls ,rule.xls,credit.xls三个execl文件解析,读取规则对象结果合计耗时:

    读取规则文件耗时——————–13484毫秒

    在drools5.0中,org.drools.decisiontable.SpreadsheetCompiler这个类可以把xls文件流转化为drl的String对象,通过FileWriter来写成drl文件,相关的转换代码是:
public String drlString(String file,String toDir) throws Exception{
        SpreadsheetCompiler sc = new SpreadsheetCompiler();
        File f = new File(file);
        String fileName = f.getName();
        String name = fileName.substring(0,fileName.lastIndexOf("."));
        FileInputStream xlsStream = new FileInputStream(f);
        String drlFileTmp = sc.compile(xlsStream, InputType.XLS);
        drlFileTmp.replaceAll(".xls", ".drl");
        File drlFile = new File(toDir + "/" + name + ".drl");
        FileWriter writer = new FileWriter(drlFile);
        writer.write(drlFileTmp);
        writer.close();
        return drlFileTmp;
}
  把execl解析成为drl文件后,读取规则对象结果合计耗时:

  读取规则文件耗时——————--7579毫秒

    从数据上看,几乎节省了一半的时间开销。当然,7.6秒仍然不是一个可以接受的数字,需要继续优化。我们需要在系统打版本的时候,就把xls规则文件转换为drl规则文件,然后我们在系统启动的时候,把规则对象通过oscache缓存在内存中。如果没有该对象则重新从规则文件中读取,有的话直接从内存读取,这样一来,读取规则对象消耗的时间几乎为0。这里把xls转化为drl文件只是为了加速系统的启动。

你可能感兴趣的:(drools)