Drools基本组件与文件介绍

1.什么是Drools引擎?

Drools引擎是Drools中的规则引擎。Drools引擎存储、处理和评估数据,以执行您定义的业务规则或决策模型。Drools引擎的基本功能是将传入的数据或事实与规则的条件相匹配,并确定是否和如何执行规则。

Drools中使用以下基础组件操作

1.规则器(rules):定义的业务规则或DMN决策。所有规则必须至少包含触发规则的条件和规则规定的操作。
2.事件规则(facts):输入或更改Drools引擎中与规则条件匹配以执行适用规则的数据。
3.生产存储器(Production memory:):规则存储在Drools引擎中的位置
4.匹配存在器(Working memory);事件存储在Drools引擎中的位置
5.执行器(Agenda):为准备执行而注册和排序激活规则的位置(如果适用的话)。

在这里插入图片描述
对新的数据和被修改的数据进行规则的匹配称为模式匹配( Pattern Matching )。进行匹配的引擎称为推理机( Inference Engine )。被访问的规则称为 ProductionMemory ,被推理机进行匹配的数据称为 WorkingMemory 。 Agenda 管理被匹配规则的执行。推理机所采用的模式匹配算法有下列几种: Linear , RETE , Treat , Leaps 。这里注意加红的地方,对数据的修改也会触发重新匹配,即对 WorkingMemory中的数据进行了修改。

规则文件 *.drl / *.xls(决策表)

*.drl文件
rule "ageUp12" when
 $student: Student(age > 2)
    then
 $student.ageUp12();
    end

rule "nameMax" when
 $student: Student(name == "max")
    then
 $student.nameMax();
    retract($student);
    end
  • package 定义了规则文件的一个命名空间,和java中的package无关。
  • import 这里可以有多个,就是在规则文件里引用到的java类。
  • rule 用来定义一个规则,这里名字不可重复,后面跟一个when关键字,翻译过来就是,规则 名ageUp12,当满足…
    - when 和then之间是逻辑表达式,也就是辨别条件,其中 s t u d e n t : S t u d e n t ( a g e > 2 ) 这里其实包含了两个意思,一个是满足 a g e > 2 的 S t u d e n t 对象,一个是把这个对象赋值给 student:Student(age >2)这里其实包含了两个意思,一个是满足age>2的Student对象,一个是把这个对象赋值给 student:Student(age>2)这里其实包含了两个意思,一个是满足age>2Student对象,一个是把这个对象赋值给student变量,这样后面就可以引用这个变量了。逻辑表达式写在小括号里,如果是多个条件,可以用逗号分隔,如$sutdent :Student(age > 2,name==“max”)
    - then和end之间来定义action,即当满足age>2的时候,做什么操作,这里可以像在java方法里一样,调用任何一个java类的方法,只要import了这个类且在前面定义了这个变量

*.xls(决策表) (decisiontable)
决策表就是一个excel文件,可以是xls(xlsx暂不支持)或者csv是个表格,看上去也很直观,即便是不懂代码的人看了也能看懂,不像drl文件那么多语法。关键的一点是:decisiontable也是最终转成drl文件来让drools规则引擎来解析执行的
在这里插入图片描述

  • 第一行,第一列:RuleSet 第二列。这里RuleSet可以省略的,累似drl文件中的package
  • 第二行,第一列:Import 第二列具体的java类,这里和drl文件里的Improt相对应,多个引用类用逗号分隔
  • 第三行,是个对这个决策表的说明
  • 第四行,第一列:RuleTable FirstDecisionTable 这一行很关键 指明这是一个决策表,并且下面的几行都是具体的规则,就好比上面几行是一些准备条件,下面才是真正干活的地方,这里来个说明
  • 第五行,CONDITION行,这一行可以有两种列名:CONDITION ACTION。CONDITION列就是drl里的辨别条件, ACTION则是具体的操作,即满足前面几列的CONDITION的条件后,会执行什么操作,这里CONDITION一定在ACTION前面,ACTION可以有多个列, 单个ACTION里的多个操作用逗号分隔,末尾要加分号结尾这里很重要,不然会有解析错误
  • 第六行,紧挨着CONDITION的一行,可以在这里声明下面要用的到对象,对应drl文件里的$student:Student()
  • 第七行,是辨别条件逻辑表达式,如:student.getAge()== p a r a m 则对应 d r l 里的 a g e = = 12 这里 param则对应drl里的age==12这里 param则对应drl里的age==12这里param是对应列每个单元格的值,然后这里需要特别说明下,针对于非字符串,如整数,小数等,可以直接使用$param,但是如果单元格里是字符串,则需要加双引号。(ps:mac里的双引号是斜的,一定要保证是竖着"的)另外,如果有多个值,可以用逗号隔开,然后可以用$1,$2提取变量值,如第一个ACTION里的student.doAction1($1,“$2”)
  • 第八行仍然是注释行,可以添加每一个CONDITON ACTION列的说明。
    下面的每一行就是对应的某些条件的取值了。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值