1 业务场景说明

⽤户购买的⾦额和对应送多少积分的规则如下:

100元以下, 不加分
100元-500元 加100分
500元-1000元 加500分
1000元 以上 加1000分

2 开发实现

第⼀步:创建maven⼯程droolsDemo并导⼊drools相关maven坐标

    <dependencies><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.10.0.Final</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies>

第⼆步:根据drools要求创建resources/META-INF/kmodule.xml配置⽂件

需要有⼀个配置⽂件告诉代码规则⽂件drl在哪⾥,在drools中这个⽂件就是kmodule.xml,放置到resources/META-INF⽬录下。

编写kmodule.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<kmodule xmlns="http://www.drools.org/xsd/kmodule"><!--name:指定kbase的名称,可以任意,但是需要唯⼀ packages:指定规则⽂件的⽬录,需要根据实际情况填写,否则⽆法加载到规则⽂件 default:指定当前kbase是否为默认 --><kbase name="myKbase1" packages="rules" default="true"><!--name:指定ksession名称,可以任意,但是需要唯⼀ default:指定当前session是否为默认 --><ksession name="ksession-rule" default="true"/></kbase>
</kmodule>

注意:上⾯配置⽂件的名称和位置都是固定写法,不能更改

Kmodule中可以包含⼀个到多个kbase,分别对应drl的规则⽂件。

Kbase需要⼀个唯⼀的name,可以取任意字符串。

packages为drl⽂件所在resource⽬录下的路径。注意区分drl⽂件中的package与此处的package不⼀定相同。多个包⽤逗号分隔。默认情况下会扫描resources⽬录下 所有(包含⼦⽬录)规则⽂件。 kbase的default属性,标示当前KieBase是不是默认的,如果是默认的则不⽤名称就可以查找到该KieBase,但每个module 最多只能有⼀个默认KieBase。

kbase 下⾯可以有⼀个或多个 ksession, ksession 的 name 属性必须设置,且必须唯⼀。

第三步:创建实体类Order

package com.xiongpeng.entity;public class Order {private int amout;//订单原价⾦额private int score;//积分public int getAmout() {return amout;}public void setAmout(int amout) {this.amout = amout;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}@Overridepublic String toString() {return "Order{" + "amout=" + amout + ", score=" + score + '}';}
}

第四步:创建规则文件resources/rules/score-rules.drl

package rules
import com.xiongpeng.entity.Order//规则1:100元以下, 不加分
rule "score_1"
when$s : Order(amout <= 100)
then$s.setScore(0);System.out.println("成功匹配到规则1:100元以下, 不加分 ");
end//规则2:100元-500元 加100分
rule "score_2"
when$s : Order(amout > 100 && amout <= 500)
then$s.setScore(100);System.out.println("成功匹配到规则2:100元-500元 加100分 ");
end//规则3:500元-1000元 加500分
rule "score_3"
when$s : Order(amout > 500 && amout <= 1000)
then$s.setScore(500);System.out.println("成功匹配到规则3:500元-1000元 加500分 ");
end//规则4:1000元 以上 加1000分
rule "score_4"
when$s : Order(amout > 1000)
then$s.setScore(1000);System.out.println("成功匹配到规则4:1000元 以上 加1000分 ");
end

这个规则⽂件就是描述了,当符合什么条件的时候,应该去做什么事情,每当规则有变动的时 候,我们只需要修改规则⽂件,然后重新加载即可⽣效。

第五步:编写单元测试

package com.xiongpeng.test;import com.xiongpeng.entity.Order;
import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;public class TestDrools {@Testpublic void test1(){//第一步KieServices kieServices = KieServices.Factory.get();//第二步KieContainer kieContainer = kieServices.getKieClasspathContainer();//第三步//会话对象,⽤于和规则引擎交互KieSession kieSession = kieContainer.newKieSession();//构造订单对象,设置订单⾦额,由规则引擎计算获得的积分Order order = new Order(); order.setAmout(200);//第四步//将数据交给规则引擎,规则引擎会根据提供的数据进⾏规则匹配kieSession.insert(order);//第五步//激活规则引擎,如果匹配成功则执⾏规则kieSession.fireAllRules();//第六步// 关闭会话kieSession.dispose();//打印结果;System.out.println("订单提交之后积分:"+order.getScore()); }
}

运行结果如下:

3 案例小结

我们在操作Drools时经常使⽤的API以及它们之间的关系如下图:

Kie全称为Knowledge Is Everything,即"知识就是⼀切"的缩写,是Jboss⼀系列项⽬的总称

规则引擎构成

drools规则引擎由以下三部分构成:

  • Working Memory(⼯作内存)
  • Rule Base(规则库)
  • Inference Engine(推理引擎)

其中Inference Engine(推理引擎)⼜包括:

  • Pattern Matcher(匹配器) 具体匹配哪⼀个规则,由这个完成
  • Agenda(议程)
  • Execution Engine(执⾏引擎)

如下图所示:

相关概念说明

Working Memory:工作内存,drools规则引擎会从Working Memory中获取数据并和规则⽂件中定义的规则进⾏模式匹配,所以我们开发的应⽤程序只需要将我们的数据插⼊到Working Memory中即可,例如本案例中我们调⽤kieSession.insert(order)就是将order对象插⼊到了⼯作内存中。

Fact:事实,是指在drools 规则应⽤当中,将⼀个普通的JavaBean插⼊到Working Memory后的对象就是Fact对象,例如本案例中的Order对象就属于Fact对象。Fact对象是我们的应⽤和规则引擎进⾏数 据交互的桥梁或通道。

Rule Base:规则库,我们在规则⽂件中定义的规则都会被加载到规则库中。

Pattern Matcher:匹配器,将Rule Base中的所有规则与Working Memory中的Fact对象进⾏模式匹配,匹配成功的规则将被激活并放⼊Agenda中。

Agenda:议程,用于存放通过匹配器进⾏模式匹配后被激活的规则。

Execution Engine:执行引擎,执⾏Agenda中被激活的规则。

规则引擎执⾏过程

Drools(2):Drools快速入门相关推荐

  1. Drools规则引擎之入门案例(一)

    1.问题引出 一个在线申请信用卡的业务场景,用户需要录入个人信息,通过上图可以看到,用户录入的个人信息包括姓名.性别.年龄.学历.电话.所在公司.职位.月收入.是否有房.是否有车.是否有信用卡等.录入 ...

  2. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

  3. 计算机入门新人必学,异世修真人怎么玩?新手快速入门必备技巧

    异世修真人怎么快速入门?最近新出来的一款文字修仙游戏,很多萌新不知道怎么玩?进小编给大家带来了游戏新手快速入门技巧攻略,希望可以帮到大家. 新手快速入门攻略 1.开局出来往下找婆婆,交互给点钱,旁边有 ...

  4. Spring Boot 2 快速教程:WebFlux 快速入门(二)

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...

  5. Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)

    2019独角兽企业重金招聘Python工程师标准>>> 本文节选自<Netkiller Database 手札> 第 63 章 Apache Hive 目录 63.1. ...

  6. 《iOS9开发快速入门》——导读

    本节书摘来自异步社区<iOS9开发快速入门>一书中的目录,作者 刘丽霞 , 邱晓华,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 iOS ...

  7. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

  8. python scrapy菜鸟教程_scrapy学习笔记(一)快速入门

    安装Scrapy Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv.json等文件中. 首先我们安装Scrapy. pip install sc ...

  9. OpenStack快速入门

    OpenStack云计算快速入门(1) 该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装.我是五岳之巅,翻译中多采用意译法,所以个别词与原版有出入,请大家谅解.我 ...

  10. Expression Blend实例中文教程(2) - 界面快速入门

    上一篇主要介绍Expression系列产品,另外概述了Blend的强大功能,本篇将用Blend 3创建一个新Silverlight项目,通过创建的过程,对Blend进行快速入门学习. 在开始使用Ble ...

最新文章

  1. 【HDU】1305 Immediate Decodability(字典树:结构体数组,二维数组,链表/指针)
  2. 为什么我们使用Linux内核的(网络)协议栈?
  3. 《Offer一箩筐》2W字总结面试套路14问——不给例子的教程都是耍流氓!!
  4. 5G信令(就是用户身份信息)风暴——就是客户端通过公钥加密的消息(携带手机IMSI号)发给服务端,服务器需用私钥解密,这个解密比较消耗资源,如果短时间大量请求到来就会触发信令风暴...
  5. C#的两种类据类型:值类型和引用类型
  6. jzoj4805-[NOIP2016提高A组模拟9.28]跟踪【dfs,树】
  7. c#+handle.exe实现升级程序在运行时自动解除文件被占用的问题
  8. AI算法连载14:统计之模型选择
  9. mulitpartfile怎么接收不到值_和平精英信号接收区和信号值是什么?信号值怎么恢复...
  10. script setup 实验性 vue 语法
  11. Linux常用的基础组件
  12. MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 区别与使用场合
  13. java中map的使用和排序使用
  14. webstorm配置vue模板 webstorm快速生成vue模板
  15. 党建管理系统开发,组织部干部人事任免平台建设方案
  16. 联想微型计算机m8000u配置,联想的产品介绍-20210412075714.pdf-原创力文档
  17. 亲民地理-第39期-佛山(2)南风古灶_我是亲民_新浪博客
  18. 互联网无处不在的“推荐算法”解析
  19. Simulink学习——弹球仿真三维动画模型(Simulink3D演示动画学习01)
  20. win11怎么关闭自动更新系统

热门文章

  1. 计算机测试的论文,计算机软件测试毕业论文(定稿).doc
  2. 高端物理学名词_物理专业名词
  3. 数据库锁机制1------共享锁
  4. STK之Commu模块之二-仿真同步卫星与地面站通信显示EIRP分布
  5. 如何用python做软件导出cad_基于Python运用PyComCAD进行Autocad二次开发实例汇集
  6. linux steam安装路径,Ubuntu Kylin 18.04 steam安装及解决方法
  7. dict后缀_词根词缀法记单词之dict
  8. 动软出现“添加服务器配置失败,请检查是否有写入权限或文件是否存在“错误
  9. 关于dom4j中jaxen运行报错问题
  10. 虚拟机访问服务器文件夹,浅析CentOS8虚拟机访问Windows10主机文件夹方法