Drools决策表的使用

Drools 决策表的使用

决策表简介

引用官方的话

决策表是一个“精确而紧凑的”表示条件逻辑的方式,非常适合商业级别的规则。 目前决策表支持xls格式和csv格式。决策表与现有的drools drl文件使用可以无缝替换。

什么时候使用决策表

  • 规则能够被表达为模板+数据的格式,考虑使用决策表
  • 很少量的规则不建议使用决策表
  • 不是遵循一组规则模板的规则也不建议使用决策表

决策表格式

RuleSet 和 drl 文件中的 package 是一样

  • RuleSet 和 drl 文件中的 package 是一样
  • Sequential 与 drl 文件中的属性优先级是一样的,只是这边为 true
  • Functions 与 drl 文件中的 function 是一样的
  • RuleTable 表示 rule name,必添
  • CONDITION ACTION 表示 rule 中的 LHS RHS 部分 至少要有一个
  • 从CONDITION 下面两行则表示 LHS 部分 第三行则为注释行,不计为规则部分,从第 四行开始,每一行表示一条规则。
  • $param 表示占位符会替换下面每一行的值,生成一条规则。

决策表的语法

决策表编译

首先需要引入maven的pom依赖:

<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-decisiontables</artifactId>
    <version>7.0.0.Final</version>
</dependency>

可以通过以下两个方式来对决策表进行解析生成drl文件:

@Test
    public void checkDrl() throws FileNotFoundException {
        File file = new File("E:\\GitHub\\respo\\drools-lesson\\src\\main\\resources\\decision.xls");
        InputStream is = new FileInputStream(file);
        SpreadsheetCompiler compiler = new SpreadsheetCompiler();
        String drl = compiler.compile(is, InputType.XLS);
        System.out.println(drl);
    }

    @Test
    public void checkDrl2() throws FileNotFoundException {
        SpreadsheetCompiler compiler = new SpreadsheetCompiler();
        String drl = compiler.compile(ResourceFactory.newClassPathResource("com/decision/decision.xls"), InputType.XLS);
        System.out.println(drl);
    }

可以通过查看生成的drl内容确定决策表的语法及业务是预期的。

与drl文件方式无缝结合

像配置drl文件格式的规则一样,我们要执行一个xls决策表操作非常简单,只用把drl文件替换为对应的xls文件即可。

具体配置如下: kmodule.xml中配置xls所在的resource目录对应的session:

<kbase name="decision-kbase" packages="com.decision">
    <ksession name="decision-rules"/>
</kbase>

同时将决策表的xls文件放置在com.decision包中,为了减少不必要的麻烦,决策表中定义的RuleSet值也应该是com.decision。

同样的,在代码中只需像正常调用代码一样获取KieSession进行后续业务处理即可:

@Test
    public void testDecision(){

        KieSession kieSession = this.getKieSessionBySessionName("decision-rules");

        kieSession.fireAllRules();
        kieSession.dispose();
    }

打印的结果与drl文件无二。

更多详情

同时也可查看github上的代码:https://github.com/secbr/drools

如果想获得更多相关技术交流可加入QQ技术交流群:593177274

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

免插件实现WordPress的Sitemap功能

生成 Sitemap 的插件有很多,比较知名的有柳城的 Baidu Sitemap Generator 和 Google XML Sitemaps,感觉就为了生...

4058
来自专栏Android 研究

APK安装流程详解1——有关"安装ing"的实体类概述

该类包含了从AndroidManifest.xml文件中收集的所有信息。 PackageInfo.java源码地址 通过源码我们知道PackageInfo是...

992
来自专栏Objective-C

Swift-MVVM 简单演练(三)

2653
来自专栏DOTNET

ASP.NET MVC编程——验证、授权与安全

1 验证 一般采用表单验证完成登陆验证,建议结合SSL使用。为限制控制器只能执行HTTPS,使用RequireHttpsAttribute 2 授权 对账户的...

2906
来自专栏草根专栏

从头编写 asp.net core 2.0 web api 基础框架 (1)

工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net c...

5436
来自专栏腾讯云API

【转】腾讯云 TCCLI 实践分享

原文地址:https://cloud.tencent.com/developer/article/1158013

1403
来自专栏学海无涯

Android开发之高德地图实现定位

在应用开发中,地图开发是经常需要使用的“组件”,Google Map虽然有官方教程,无奈用不起来,原因你懂的~~那么国内比较出名的是就是百度地图和高德地图,由于...

3524
来自专栏WindCoder

飞机订票系统—C语言版

可以算个伪原创吧,这是之前为朋友做的一个课程设计,当初从网上找了几个最后修改出这么一个简单系统,当个作业交给老师还是没什么问题的。附件里有所有文件的打包下载。

1702
来自专栏向治洪

自定义actionbar

Android 3.0及以上已经有了ActionBar的API,可以通过引入support package在3.0以下的平台引用这些API,但这儿呢,完全自定义...

1909
来自专栏坚毅的PHP

关于java

大整数10进制转16进制问题 google了都没什么好的解决方法,因为要转换的十进制有300多位,long都装不下,没有直接可用的函数可以拿来用 王总的方法分享...

3188

扫码关注云+社区