本篇博客主要讲解Drools常用的属性以及函数

属性

首先我们在resources\rules文件夹下创建一个Property.drl,还有一个DroolsApplicationPropertyTests

1. salience优先级

salience 属性的值默认为0,它的值越大执行的优先级就越高,看如下代码在执行的时候就会先执行salience2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 rule "salience2"
salience 2
when
eval(true)
then
System.err.println("salience2");
end rule "salience1"
salience 1
when
eval(true)
then
System.err.println("salience1");
end
1
2
3
4
@Test
public void testSalience() {
kieSession.fireAllRules();
}

2. date-effective日期比较(小于等于)

当系统时间小于等于date-effective的值是才会执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
 rule "dateEffective"
date-effective "2018-11-24"
when
then
System.err.println("2018-11-24被执行");
end rule "dateEffectiveTomorrow"
date-effective "2018-11-25"
when
then
System.err.println("2018-11-25被执行");
end
1
2
3
4
5
6
7
8
9
@Test
public void testDateEffective() {
kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("dateEffective"));
} @Test
public void testDateEffectiveTomorrow() {
kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("dateEffectiveTomorrow"));
}

由于今天是11月24,所以上方的dateEffectiveTomorrow将不会执行。

还有需要注意的是Drools默认的时间格式是dd-MMM-yyyy的,也就是说你必须使用24-十一月-2018它才能识别,我为什么能使用yyyy-MM-dd呢,请参考上篇文章中进行自动配置时的getKieServices()方法

3. date-expires日期比较(大于)

刚好于date–effective相反

4. enabled

当一个规则的enabled属性变为false时这条规则将不再可用

1
2
3
4
5
6
rule "enabled"
enabled false
when
then
System.err.println("被禁用的规则");
end
1
2
3
4
@Test
public void testEnabled() {
kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("enabled"));
}

函数

接着我们在resources\rules文件夹下创建一个Function.drl,还有一个DroolsApplicationFunctionTests

Drools中常用函数分别为insert、update和retract,分别是插入更新和删除,我们来看一下下方的几个规则的执行过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
rule "test1"
when then
insert(new User("赵六",12));
System.err.println("创造赵六");
end rule "test2"
when
$u:User(name=="赵六")
then
$u.setName("王五");
update($u);
System.err.println("赵六");
end rule "test3"
when
$u:User(name=="王五")
then
System.err.println("王五");
retract($u);
end rule "test4"
when
$u:User(name=="王五")
then
System.err.println("王五删除删除之后"+$u.getName());
end

可用看的,test1规则没有判断条件,所以直接被执行,执行过程中它生成了一个对象插入到工作内存中,此对象的规则又恰好与test2规则匹配,所以紧接着test2执行,test2执行时更新了user对象,更新后的对象又匹配了test3,所以test3继续执行。执行完毕后user对象被删除,test4就执行不了了。

另外还有几个方法也是常用的:

  1. getWorkingMemory,获取当前的WorkingMemory对象
  2. halt,执行完当前规则后不再执行其他规则
  3. getRule,获取当前规则对象

本文所有源码:https://github.com/shiyujun/drools

本文出自http://zhixiang.org.cn/,转载请保留

Drools规则引擎入门指南(二)的更多相关文章

  1. Drools规则引擎入门指南(一)

    最近项目需要增加风控系统,在经过一番调研以后决定使用Drools规则引擎.因为项目是基于SpringCloud的架构,所以此次学习使用了SpringBoot2.0版本结合Drools7.14.0.Fi ...

  2. Drools规则引擎入门指南(三)——使用Docker部署Workbench

    其实本来我也是打算使用Tomcat来部署Workbench的,但是在网上看了几篇文章,超级繁琐的配置.各种版本.实在看不下去了索性就直接使用Docker来部署了.本次部署的版本是最新稳定版,对应dro ...

  3. drools规则引擎笔记(二)

    规则引擎版本,drools6.5.0 final eclipse:Neon JDK1.8 今天主要是在规则的when部分加入了多个fact对象. 对于working memory存在多个fact的情形 ...

  4. Drools规则引擎

    一.简介 Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules ...

  5. Drools 规则引擎应用

    规则引擎-drools 1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 .... ...

  6. Drools 规则引擎应用 看这一篇就够了

    1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 ...... 1.2传统做法 1 ...

  7. Drools 规则引擎环境搭建

    一.关于 drools 规则引擎 前面写过一篇 Drools 规则引擎相关的文章,这篇文章主要记录一下规则引擎的环境搭建和简单示例.不熟悉 drools 的朋友可以看看这篇文章: 自己写个 Drool ...

  8. Drools规则引擎-如果判断某个对象中的集合是否包含指定的值

    规则引擎集合相关处理 在实际生产过程中,有很多关于集合的处理场景,比如一个Fact对象中包含有一个集合,而需要判断该集合是否包含某个值.而Drools规则引擎也提供了多种处理方式,比如通过from.c ...

  9. SpringBoot2 整合 Drools规则引擎,实现高效的业务规则

    本文源码:GitHub·点这里 || GitEE·点这里 一.Drools引擎简介 1.基础简介 Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的 ...

随机推荐

  1. 010 Editor 8.0.1 之 逆向分析及注册机编写

    前言一.工具及软件介绍二.逆向分析2.1.找到提示错误注册弹窗2.2.分析跳转处代码2.3.=2D 函数分析2.3.1.获取注册码处分析2.3.2.3处分支分析2.3.2.1.9C情况2.3.2.2. ...

  2. 【深度好文】多线程之WaitHandle-->派生EventWaitHandle事件构造-》AutoResetEvent、ManualResetEvent

    AutoResetEvent/ManualResetEvent 都是继承自 EventWaitHandle ,EventWaitHandle继承自WaitHandle. 在讨论这个问题之前,我们先了解 ...

  3. 原生js简单轮播图 代码

    在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用 ...

  4. dskinlite(uieasy mfc界面库)使用记录2:绘制动态元素(按钮控件绘制元素动态控制,改变图片和文字)

    效果图:这4个分别是按钮按下后4种状态的效果 第88行是显示默认的按钮文字,没有id,SetWindowText改的就是它了 第87行是左边的图片,id是ico,可以通过程序控制 第89行是蓝色的文字 ...

  5. 初学html,任务2:写一个简单的登陆/注册界面

    先在body中把最基础的标签写出来 现在页面运行出来是这样的 就是一个没有任何样式的基础界面: 接下来我们为这些标签加上样式 首先还是让页面所有元素的padding和margin都设置为0, 清除浏览 ...

  6. python中print不换行

    python中的print打印的结果总是进行了换行,如果不想换行显示可以在print中添加“end ='' ” 一般print显示: for i in range(3): print(i) #显示结果 ...

  7. XML文件的解析—DOM、SAX

    一.DOM 解析 思路:获得Document对象,遍历其中节点获得需要的内容 要点: Document :  DocuemntBuilderFactory --newDocumentBuilder - ...

  8. bgfx入门练习3——编译自定义Shader

    马个鸡,总算编译过了自定义Shader,在此感谢自己,感谢自己,以及感谢自己.没有自己的努力,我是不可能解决这个问题的,自己真是太叼了.妈的智障!!! 管方那屎一样的make工具根本没用,反正我是折腾 ...

  9. .net读取excel数据到DataSet中

    Dim objExcelFile As Excel.Application Dim objWorkBook As Excel.Workbook Dim objSheet As Excel.Worksh ...

  10. linux (ubuntu) 命令学习笔记

    1, md5sum 输出字符串的MD5值 echo -n 123456 | md5sum //-n表示不打印回车符 2, ubuntu设置dock任务栏鼠标点击效果 16.04: 调整位置:gsett ...