Drools决策表的使用

简介: Drools决策表的使用

##Drools 决策表的使用

##决策表简介

引用官方的话


决策表是一个“精确而紧凑的”表示条件逻辑的方式,非常适合商业级别的规则。

目前决策表支持xls格式和csv格式。决策表与现有的drools drl文件使用可以无缝替换。


##什么时候使用决策表


规则能够被表达为模板+数据的格式,考虑使用决策表

很少量的规则不建议使用决策表

不是遵循一组规则模板的规则也不建议使用决策表

##决策表格式


image.png

image.pngRuleSet 和 drl 文件中的 package 是一样


RuleSet 和 drl 文件中的 package 是一样

Sequential 与 drl 文件中的属性优先级是一样的,只是这边为 true

Functions 与 drl 文件中的 function 是一样的

RuleTable 表示 rule name,必添

CONDITION ACTION 表示 rule 中的 LHS RHS 部分 至少要有一个

从CONDITION 下面两行则表示 LHS 部分 第三行则为注释行,不计为规则部分,从第

四行开始,每一行表示一条规则。

$param 表示占位符会替换下面每一行的值,生成一条规则。

决策表的语法


image.png

image.pngimage.png

决策表编译

首先需要引入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>

1

2

3

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


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

@Test
    public void testDecision(){
        KieSession kieSession = this.getKieSessionBySessionName("decision-rules");
        kieSession.fireAllRules();
        kieSession.dispose();
    }

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

Drools技术视频

CSDN学院:《Drools7 规则引擎视频教程

CSDN学院:《Drools7系列优惠套餐》

CSDN学院:《Drools7规则引擎进阶教程》

CSDN学院:《Drools7规则引擎入门教程》

目录
相关文章
|
存储 SQL 数据库
在TiDB中创建表
【2月更文挑战第29天】在TiDB中创建表涉及定义字段名、数据类型和约束 。注意规划表结构、选择合适的数据类型和约束,以及谨慎使用索引,以平衡查询速度和写入性能。在实际操作前确保备份数据。
|
JSON Java 数据格式
三万字盘点Spring/Boot的那些常用扩展点(下)
Spring对于每个Java后端程序员来说肯定不陌生,日常开发和面试必备的。本文就来盘点Spring/SpringBoot常见的扩展点,同时也来看看常见的开源框架是如何基于这些扩展点跟Spring/SpringBoot整合的。 话不多说,直接进入正题。
|
Java
5、Drools规则引擎-.drl文件的规则语法
上一章我们讲了Drools的入门,可能很多人看到.drl的规则文件的时候,一脸蒙蔽,本章我们来讲一下规则引擎对应的规则语法
682 0
|
JavaScript
Vue 子传父 组件传参 defineEmits
Vue 子传父 组件传参 defineEmits
225 0
String、StringBuffer、StringBuilder的区别
这篇文章讨论了Java中String、StringBuffer和StringBuilder的区别。String是不可变的,每次操作都会产生新的对象,效率低且浪费内存。StringBuilder可以在原字符串基础上进行操作,不开辟额外内存,弥补了String的缺陷。StringBuffer和StringBuilder类似,但StringBuffer的方法是线程安全的。文章还列举了StringBuffer的常用方法,并提供了使用示例代码。最后总结了这三者的主要区别。
String、StringBuffer、StringBuilder的区别
|
存储 测试技术 数据库连接
Python代码结构
【7月更文挑战第16天】Python代码结构
283 2
提升编程效率的利器: 解析Google Guava库之集合篇RangeSet范围集合(五)
提升编程效率的利器: 解析Google Guava库之集合篇RangeSet范围集合(五)
|
SQL Oracle 关系型数据库
[已解决]使用sqlplus连接oracle,提示ORA-01034和ORA-27101
[已解决]使用sqlplus连接oracle,提示ORA-01034和ORA-27101
634 0
|
网络安全 开发工具 数据安全/隐私保护
Xshell连接虚拟机失败的解决方法
Xshell连接虚拟机失败的解决方法
1176 0
Xshell连接虚拟机失败的解决方法
|
小程序 Java 应用服务中间件
Spring Boot如何配置SSL实现同时支持http和https协议(超简单)
Spring Boot如何配置SSL实现同时支持http和https协议(超简单)
1472 0