标签:就是 lin halt end 默认 class 入门指南 git number
本篇博客主要讲解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就执行不了了。
另外还有几个方法也是常用的:
- getWorkingMemory,获取当前的WorkingMemory对象
- halt,执行完当前规则后不再执行其他规则
- getRule,获取当前规则对象
本文所有源码:https://github.com/shiyujun/drools
本文出自http://zhixiang.org.cn/,转载请保留
Drools规则引擎入门指南(二)
标签:就是 lin halt end 默认 class 入门指南 git number
原文地址:https://www.cnblogs.com/zhixiang-org-cn/p/10112059.html