Drool规则引擎入门

源码地址
https://gitee.com/ergo9527/drool-demo.git

工作流程

引擎启动后,首先进行编译工作,就是把我们定义好的rule加载到Production memory中,我们也可以把这个过程称为"构建知识库(knowledgeBuilder)";当我们的业务系统生成新的数据并传入到引擎,引擎把这些数据作为fact存储进Working memory;接着引擎开始"模式匹配(pattern matching)"工作,即对Working memory中的fact,匹配rule的condition项,如果匹配了,那么把这个rule加入到Agenda里面;最后是真正的执行操作,引擎会对Agenda里的rule按照优先级进行序列安排,然后执行rule定义好的action操作![img](Drool规则引擎手册

Drool入门Demo1.0

1.引入相关依赖

 <!-- Drools --><dependency><groupId>org.kie</groupId><artifactId>kie-api</artifactId><version>7.32.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-core</artifactId><version>7.32.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.32.0.Final</version></dependency><dependency><groupId>org.kie</groupId><artifactId>kie-ci</artifactId><version>7.32.0.Final</version></dependency>

2.创建实体类

bean对象在规则引擎中就是Fact,用于去匹配规则的condition

@Data
@Builder
public class Account {/*** 开户人*/private String name;/*** 账户余额 单位:万元*/private Double money;/*** 账户类型:* 黑卡:  [100-∞)万* 钻卡:  [50-100)万* 金卡:  [10-50)万* 普卡:  [0-10)万*/private String accountType;

3.编写规则文件

在resources下创建一个rules文件夹用于放规则文件,规则文件可以使用 .drl文件,也可以是xml文件,这里我们使用drl文件。

示例代码

package drools.demos.rules.ruledemo1import com.lx.entity.Account/*普卡账户判断*/
rule "account-rating-normal"
when
account: Account(money>=0,money<10)
then
account.setAccountType("普卡");
System.out.println("【"+account.getName()+"】为【"+account.getAccountType()+"】用户,当前可用余额为: "+account.getMoney()+" 万元");
System.out.println("=====存入10万元=====");
account.setMoney(account.getMoney()+10.0);
update(account);
end/*金卡账户判断*/
rule "account-rating-gold"
when
account: Account(money>=10,money<50)
then
account.setAccountType("金卡");
System.out.println("【"+account.getName()+"】为【"+account.getAccountType()+"】用户,当前可用余额为: "+account.getMoney()+" 万元");
System.out.println("=====存入50万元=====");
account.setMoney(account.getMoney()+50.0);
update(account);
end/*钻卡账户判断*/
rule "account-rating-diamond"
when
account: Account(money>=50,money<100)
then
account.setAccountType("钻卡");
System.out.println("【"+account.getName()+"】为【"+account.getAccountType()+"】用户,当前可用余额为: "+account.getMoney()+" 万元");
System.out.println("=====存入50万元=====");
account.setMoney(account.getMoney()+50.0);
update(account);
end/*黑卡账户判断*/
rule "account-rating-black"
no-loop true
when
account: Account(money>=100)
then
account.setAccountType("黑卡");
System.out.println("【"+account.getName()+"】为【"+account.getAccountType()+"】用户,当前可用余额为: "+account.getMoney()+" 万元");
System.out.println("=====存入50万元=====");
account.setMoney(account.getMoney()+50.0);
update(account)
end

4.编写配置文件

在resources下创建一个META-INF(命名固定)文件夹用于放配置文件

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.drools.org/xsd/kmodule"><kbase name="rules1" packages="drools.demos.rules.ruledemo1"><ksession name="ruledemo1"/></kbase>
</kmodule>

kbase结点用于配置规则库或知识库的信息,这里我们指定了一个指向drools.demos.rules.ruledemo1的名为rules1的kbase结点,意思就是这个rules1结点将使用我们在ruledemo1.drl里定义好的规则(ruledemo1.drl里定义的package名就是drools.demos.rules.ruledemo1)来构建知识库;kbase结点下又配置了一个名为ruledemo1的ksession结点,ksession代表了运行时的执行会话,可以在一个kbase下指定多个不同参数的session

5.编写主函数

public class Application {public static void main(String[] args) {KieServices ks = KieServices.Factory.get();KieContainer kieContainer = ks.getKieClasspathContainer();KieSession kieSession = kieContainer.newKieSession("ruledemo1");//就是kmodule.xml里定义的那个ksessionAccount account = Account.builder().name("刘二狗").accountType("").money(9.90).build();kieSession.insert(account);//把这个Fact传入kieSession.fireAllRules();//开始规则检验}

6.运行并观察结果

【刘二狗】为【普卡】用户,当前可用余额为: 9.9 万元
=====存入10万元=====
【刘二狗】为【金卡】用户,当前可用余额为: 19.9 万元
=====存入50万元=====
【刘二狗】为【钻卡】用户,当前可用余额为: 69.9 万元
=====存入50万元=====
【刘二狗】为【黑卡】用户,当前可用余额为: 119.9 万元
=====存入50万元=====

Drool规则引擎入门实例相关推荐

  1. drools 6.5 -规则引擎入门

    本文结构: 1. Drools 2. Drools 规则引擎原理 3. 入门例子 1. Drools Drools 具有一个易于访问企业策略.易于调整以及易于管理的开源业务 规则引擎,符合业内标准,速 ...

  2. python 规则引擎 drools_Drools规则引擎入门demo

    简单介绍 互联网旧系统维护中往往存在非常多的规则(比如:age < 16 || age > 50 -> REJECT ).最便捷的实现就是用 if-else 来写,但是随着规则的增加 ...

  3. mysql 规则引擎_Drools规则引擎详解-常用的drl实例

    package droolsDemo //说明:每个 drl 都必须声明一个包名,这个包名与 Java 里面的不同,它不需要与文件夹的层次结构一致, //主要用于可以根据kmodule.xml中不同的 ...

  4. 《Drools7.0.0.Final规则引擎教程》第4章 global全局变量

    global 全局变量 global用来定义全局变量,它可以让应用程序的对象在规则文件中能够被访问.通常,可以用来为规则文件提供数据或服务.特别是用来操作规则执行结果的处理和从规则返回数据,比如执行结 ...

  5. 规则引擎选型及应用 邴越 2017-04-27 16:31:17 浏览614 评论0 HTTPS 模块 配置 string exception void input 规则引擎 摘要: 规则引擎具体执

    规则引擎选型及应用 邴越 2017-04-27 16:31:17 浏览614 评论0 HTTPS 模块 配置 string exception void input 规则引擎 摘要: 规则引擎具体执行 ...

  6. 现实 虚拟世界_现实世界的规则引擎

    现实 虚拟世界 对于许多开发人员而言,规则引擎是流行语或体系结构图上的黑匣子:远远地值得人们敬畏或赞赏的事物,但尚不可理解. 顺便说一句,这是技术的22个陷阱之一: 在拥有一些第一手的现实世界经验之前 ...

  7. Drools规则引擎平台如何进行架构

    在<Drools7 规则引擎视频教程>的交流群中,有同学提出这样的问题:如果不想使用Drools官方提供的Workbench和KIE-Server进行规则的管理,而自行进行相应系统研发,该 ...

  8. 《Drools 规则引擎视频教程》相关事宜

    非常感谢大家能够有时间来看这篇博客,本篇博客主要介绍一下最近本人正在致力于的Drools 7 规则引擎文档和视频教程相关事项. Drools 本身在国内的技术网站上的资料就比较少,最近的视频教程更是几 ...

  9. 规则引擎Visual Rules Solution开发基础教程【连载6】--VisualRules实例一

    [b][align=center][size=x-large]VisualRules实例一[/size][/align][/b] [size=medium] 以下通过一个简单的例子,来大致说明如何利用 ...

  10. 规则引擎一:IBM规则引擎 ODM入门

    转自http://www.cnblogs.com/soul-tap/p/4956052.html IBM规则引擎(ODM)入门系列一(1):如何编写规则项目 最近,因项目需要,研究使用IBM的规则引擎 ...

最新文章

  1. Oracle 11g Release 1 (11.1) Data Pump 导出模式
  2. matlab 图像分割 提取人像_几种典型的图像处理技术(分类 目标提取 目标跟踪 语义分割 实例分割)...
  3. AtCoder Regular Contest 098
  4. ASP.NET MVC 3.0学习系列文章—Model in ASP.NET MVC 3.0
  5. [OSDI 12] PoweGraph: 分布式图并行计算框架 学习总结
  6. Java虚拟机学习(4):JDK可视化监控工具
  7. 12-黑马程序员------C 语言学习笔记--- C语言指针与函数
  8. MySQL 之Navicat Premium 12安装使用、pymysql模块使用、sql注入问题的产生与解决
  9. 推荐 12个Idea 免费实用插件及插件离线安装方法
  10. 计算机系统军训口号,霸气的军训口号大全
  11. Struts2学习第三课 Struts2详解
  12. toad软件 insert批量操作_AE创建、PR制作,动态字幕跨软件也能批量操作
  13. [Stage3D]硬件加速的径向模糊
  14. linux编辑复制多行命令,linux下文本编辑器vim的使用,复制-粘贴-替换-行号-撤销-多文件操作...
  15. 拼多多显示内部服务器错误是怎么回事,拼多多提现出现错误怎么办?拼多多提现常见问题...
  16. PDF转CAD格式软件下载及使用教程
  17. html公历农历相互转换,JavaScript实现公历转换农历
  18. 仿淘宝购物车demo---增加和减少商品数量
  19. 王者苹果服务器转安卓系统,王者荣耀苹果用户可以转?王者荣耀苹果用户转安卓的方法教程...
  20. vue中使用element-ui时单元格内换行的问题

热门文章

  1. Windows 系统彻底卸载 SQL Server 通用方法
  2. 万嘉MOV格式转换器v1.00.102官方免费版
  3. STM32程序下载1:通过keil-ST-Link方式下载
  4. 使用pads查看手机原理图
  5. 直线型一阶倒立摆1---概念篇
  6. C# 键盘钩子和鼠标钩子的使用详解
  7. centos7安装java(多种方式)
  8. linux内核线程详解,Linux内核线程
  9. 各种Demo下载网址
  10. linux 软键盘输入密码,Linux系统中使用屏幕键盘的方法