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规则引擎入门教程》

目录
相关文章
|
Java
5、Drools规则引擎-.drl文件的规则语法
上一章我们讲了Drools的入门,可能很多人看到.drl的规则文件的时候,一脸蒙蔽,本章我们来讲一下规则引擎对应的规则语法
825 0
|
8月前
|
存储 SQL 关系型数据库
RDS DuckDB技术解析一:当 MySQL遇见列式存储引擎
RDS MySQL DuckDB分析实例以​列式存储与向量化计算​为核心,实现​复杂分析查询性能百倍跃升​,为企业在海量数据规模场景下提供​实时分析能力​,加速企业数据驱动型决策效能。​​
|
缓存 监控 负载均衡
提升HTTP动态代理IP性能的最佳实践
在现代网络环境中,HTTP动态代理IP的优化配置至关重要。通过选择合适的代理类型(正向/反向代理)、配置缓存、使用负载均衡、加强安全配置(SSL/TLS加密、身份验证)、管理日志、性能监控、限制带宽、定期更新软件和优化用户体验(减少延迟、内容压缩),可以显著提升网络性能、安全性及用户满意度。根据具体需求灵活调整配置,实现最佳效果。
521 64
提升HTTP动态代理IP性能的最佳实践
|
前端开发 JavaScript
除了使用Polyfill,还有其他解决Promise.allSettled()兼容性问题的方法吗?
除了使用Polyfill,还有其他解决Promise.allSettled()兼容性问题的方法吗?
553 179
|
存储 人工智能 搜索推荐
详解MySQL字符集和Collation
MySQL支持了很多Charset与Collation,并且允许用户在连接、Server、库、表、列、字面量多个层次上进行精细化配置,这有时会让用户眼花缭乱。本文对相关概念、语法、系统变量、影响范围都进行了详细介绍,并且列举了有可能让字符串发生字符集转换的情况,以及来自不同字符集的字符串进行比较等操作时遵循的规则。对于最常用的基于Unicode的字符集,本文介绍了Unicode标准与MySQL中各个字符集的关系,尤其详细介绍了当前版本(8.0.34)默认字符集utf8mb4。
2921 82
|
存储 Java 应用服务中间件
Java规则引擎Drools急速入门
Java规则引擎Drools急速入门
10634 0
Java规则引擎Drools急速入门
|
存储 测试技术 数据库连接
Python代码结构
【7月更文挑战第16天】Python代码结构
463 2
|
编解码
H.264 码率设置
一、什么是视频码率 视频码率是视频数据(包含视频色彩量、亮度量、像素量)每秒输出的位数。一般用的单位是kbps。 二、设置视频码率的必要性 在网络视频应用中,视频质量和网络带宽占用是相矛盾的。
2408 0
|
测试技术 数据安全/隐私保护
jmeter--全局参数设置与CSV数据导入
jmeter--全局参数设置与CSV数据导入

热门文章

最新文章