目录

  • 1、no-loop循环控制
  • 2、分组属性
    • 2.1、agenda-group
    • 2.2、ruleflow-group
    • 2.3、activation-group
  • 3、lock-on-active
  • 4、salience执行顺序控制
  • 5、时间控制
    • 5.1、date-effective生效时间
    • 5.2、date-expires失效时间
    • 5.3、定时器
  • 6、规则启用停用
  • 7、dialect语言设置
  • 8、规则继承
  • 9、function函数定义
  • 10、Global 全局变量

1、no-loop循环控制

rule规则默认可以重复循环执行,如果只想让规则执行1次,则将no-loop属性设置为true

rule "test-rule"
no-loop truewhenthen
end

2、分组属性

2.1、agenda-group

agenda-group属性用来对规则分组,如下例中两条规则都属于testrule组,当在代码中调用该组时,会匹配组中所有的规则

rule "test-rule01"
agenda-group "testrule"whenthen
endrule "test-rule02"
agenda-group "testrule"whenthen
end

调用方式如下,在一个会话中如果多次调用,仍然只会输出一次匹配结果

kieSession.getAgenda().getAgendaGroup("testrule").setFocus();

2.2、ruleflow-group

ruleflow-groupagenda-group分组效果一样

2.3、activation-group

activation-group属性组中的规则只要有一个被执行,其它的则不再执行,具有排他性,默认值为false
下面示例中只要任意一个匹配成功,其它的则不会再执行

rule "test-rule01"
activation-group "testrule"whenthen
endrule "test-rule02"
activation-group "testrule"whenthen
endrule "test-rule03"
activation-group "testrule"whenthen
end

3、lock-on-active

lock-on-active属性用于指定某条规则,值设置为true时免于被其它规则输出的fact对象干扰。比如其它规则执行update、modify等操作后,FACT对象中的属性值被更新,而该值正好触发其它规则的判断条件,这样就会出现规则间的干扰
如下例中,规则1执行完后update($b),将income设置为10001,刚好满足规则2触发条件,如果不设置lock-on-active true,那么规则2也会触发,这里需要根据实际需求判断是否添加该属性。

rule "lock-on-active-1"
when$b : Borrower( income < 10000)
thenSystem.out.println("lock-on-active-1触发,income=" + $b.getIncome());$b.setIncome(new BigDecimal(10001));update($b)endrule "lock-on-active-2"
lock-on-active true
when$b : Borrower(income > 10000)
thenSystem.out.println("lock-on-active-2触发,income=" + $b.getIncome());
end

4、salience执行顺序控制

通过指定salience属性值来控制规则执行顺序,其默认值为0,数值越大优先级越高,也可以为负数
下面示例执行顺序为test-rule1test-rule2test-rule3

rule "test-rule1"
salience 5whenthen
endrule "test-rule2"
salience 0whenthen
endrule "test-rule3"
salience -2whenthen
end

5、时间控制

5.1、date-effective生效时间

date-effective属性表示生效时间,可以与系统时间比对,根据条件在指定时间执行,默认格式为dd-MMM-yyyy,下面示例表示只要到了2020年7月15日才会执行该规则

rule "test-rule1"
date-effective "15-Jul-2020"whenthen
end

自定义时间为yyyy-MM-dd HH:mm格式,在创建KieSession会话前加一行设置代码即可

System.setProperty("drools.dateformat","yyyy-MM-dd HH:mm");
KieSession kieSession = kieContainer.newKieSession("date-effective-rules");
...

表示只要到了2020年7月15日上午9点30分才会执行该规则

rule "test-rule1"
date-effective "2020-7-15 9:30"whenthen
end

5.2、date-expires失效时间

date-expires属性表示失效时间,用法与date-effective一样

5.3、定时器

定时器是通过timer()函数进行设置,有两种格式可以使用
1)格式一:timer ( int: <initial delay> <repeat interval>? ),第一个参数表示初始执行时间,第二个参数表示执行间隔时间,比如timer ( int: 1m 10m )表示运行后1分钟开始执行第一次,往后每个10分钟执行一次
2)格式二:timer ( cron: <cron expression> )
cron表达式详细用法请参考Cron表达式常见用法
下面示例表示为每天凌晨 2 点执行

rule "test-rule1"
timer (cron:0 0 2 * * * )whenthen
end

6、规则启用停用

enabled属性设置规则是否可以,默认为true可用,设置为false则不可用

rule "test-rule1"
enabled truewhenthen
endrule "test-rule2"
enabled falsewhenthen
end

7、dialect语言设置

dialect默认为java,也可以指定为mvel

rule "test-rule1"
dialect "java"whenthen
endrule "test-rule2"
dialect "mvel"whenthen
end

8、规则继承

extends关键字可以实现规则间触发条件的继承

rule "test-rule1"whenthen
endrule "test-rule2" extends "test-rule1"whenthen
end

9、function函数定义

在rule规则中,可以使用function定义封装函数,然后在then后面调用,支持传参和返回值

rule "test-rule1"whenthen//函数调用printIncome(new BigDecimal(1000));System.out.println(getName());
end// 无返回值,传入参数
function void printIncome(BigDecimal income){System.out.println(income);
}// 有返回值
function String getName(){String name = "zhangshan";return name;
}

10、Global 全局变量

global定义的全局变量对象,可以在规则文件中使用
先创建TestService类,并定义一个testGlobal()方法

public class TestService {public static void testGlobal() {System.out.println("testGlobal");}
}

静态方法注入:
直接在规则中使用globalTestService设置为全局变量,然后就可以进行调用了

global com.example.droolsdemo.TestService testServicerule "test-rule1"whenthen//函数调用testService.testGlobal();
end

实例化bean注入:

 TestService testService = new TestService();kieSession.setGlobal("testService" , testService);

Drools常用属性相关推荐

  1. selenium提取数据之driver对象的常用属性和方法

    selenium提取数据之driver对象的常用属性和方法 在使用selenium过程中,实例化driver对象后,driver对象有一些常用的属性和方法 driver.page_source 当前标 ...

  2. 尚硅谷学习笔记-节点的常用属性和方法

    节点的常用属性和方法[图片在末尾] 方法: 通过具体的元素节点调用 getElementsByTagName() 方法,获取当前节点的指定标签名孩子节点 appendChild( oChildNode ...

  3. Node.js process 模块常用属性和方法

    Node.js是常用的Javascript运行环境,本文和大家发分享的主要是Node.js中process 模块的常用属性和方法,希望通过本文的分享,对大家学习Node.js http://www.m ...

  4. css规则中区块block,css常用属性总结:背景background下篇

    前言:这段时间天天加班到10:30之后,简直是x了. 在上一篇文章中,分别解析了background各个属性的用法和注意细节.如果我们在项目上使用背景效果,如果使用下面的写法,你可能抓狂. body{ ...

  5. 5中div标签有没有url属性_[网页编程]-03 CSS 常用属性

    字体处理常用属性 <!DOCTYPE html> <html><head><meta charset="utf-8"><tit ...

  6. js如何操作表格(常用属性方法汇总)

    js如何操作表格(常用属性方法汇总) 一.总结 一句话总结: 二.表格相关的属性和方法 1.1 Table 对象集合 cells[] 返回包含表格中所有单元格的一个数组. 语法:tableObject ...

  7. wpf- DataGrid 常用属性和事件

    组件所在命名空间: System.Windows.Controls 组件常用方法: BeginEdit:使DataGrid进入编辑状态. CancelEdit:取消DataGrid的编辑状态. Col ...

  8. TeeChart for .NET常用属性总结

    2019独角兽企业重金招聘Python工程师标准>>> 本文总结了图表控件Teechart for .NET常用的一些属性,对图表开发人员来说是一个很好的参考. 实现绘图步骤: 1. ...

  9. js基础-字符串常用属性合集

    /*   *   * 实例方法---->必须要通过new的方式创建的对象(实例对象)来调用的方法   * 静态方法---->直接通过大写的构造函数的名字调用的方法(直接通过大写的对象名字调 ...

最新文章

  1. python 开发版-Micropython开发板固件烧写教程
  2. makefile中命令的显示
  3. 使用trackBy启动流程
  4. deepin20系统选择手动安装盘_深度系统Deepin 20最新正式版发布:全面升级
  5. kubernets1.52安装文档
  6. resultAPI示例
  7. TD数量不确定时如何让其宽度平均分布
  8. iOS底层探索之类的结构(中):bits
  9. 浅谈TCP/IP协议中TCP与UDP的区别
  10. XP显示不了隐藏文件了 无法使用Windows XP搜索功能
  11. 如何避免由 Web 字体引起的布局偏移
  12. javaweb+vue汽车4S店车辆维修管理系统springboot
  13. js中new操作符到底干了什么?
  14. 13700k和13700kf的区别 i7 13700k和13700kf怎么选
  15. 美国大学计算机科学专业排名2020,美国大学计算机专业排名2020情况如何?
  16. 中南大学实验室安全知识 网上学习6小时的小工具,小技巧
  17. oXygen使用笔记:使用模板创建dita文件
  18. 前端名词解释(持续更新)
  19. WebShell -- Linux反弹
  20. 网站安全在线扫描工具

热门文章

  1. PBOC电子钱包规范简介
  2. [技巧篇] 如何在不会的情况下解释 Python 设置文件的缓冲的问题
  3. lc电路在计算机中应用,PC在电路图中代表什么
  4. WPF中为button按钮设置CornerRadius圆角
  5. 聚力赢变、共创未来——中国餐饮千店万家生态联盟工程
  6. 态路小课堂丨三种实现光模块更高传输速率的技术你知道吗?
  7. put: File /input._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). Ther
  8. linux 桌面 资源占用,Linux桌面使用率前20大国家
  9. XPath与Xquery
  10. Qt:Extra characters after test expression.