规则文件是以 .ftl 结尾的文本文件
标准的规则文件结构为:
package package-name
imports "引入变量 同Java的import"
globals "定义的全局变量"
functions "规则文件中自定义的方法"
queries "规则文件中自定义的查询方法"
rule "规则体"
规则文件内容解析:
package:
与Java文件的package类似 ,但是这里并不是指规则文件的路径,只是逻辑或名称上的区分。可以随便写,但是建议与文件路径一直便于管理,整体结构也比较整洁。
Imports
引入规则文件的外部变量,同Java中的import。
globals
定义规则文件中的全局变量,可以使变量也可以是工具类或者service等
functions
规则中自定义的方法,
queries
规则中自定义的查询方法,
rule
rule 关键字用于定义定义drools规则文件中的一个规则。
一个规则有三部分组成:属性部分,条件部分 when ,结果部分 then。以rule开头以end结束。
rule “规则名称”
属性部分:定义规则执行的属性
when
条件部分:LHS(left hand side) 规则的条件
then
结果部分:RHS(Right hand side)满足条件后的业务逻辑。
end
属性部分:设置规则属性,例如优先级,是否可重复执行、分组、获取焦点
条件部分:可以有多个条件,默认是与(&&)的关系,没有条件时默认为true。 存在条件时,先判断Fact对象是否存在于Working Memory中。 条件部分又称为pattern(匹配模式),多个pattern之间使用&& 和|| 链接,也可以使用括号确定pattern优先级。 默认使用 “,”表示and的关系,”,”不能与&& ||混用。
结果部分:条件满足后的执行逻辑,能使用LHS中定义的的变量,或者直接编写Java代码,then中不建议编写if-else条件判断。这样就违背了drools设计的初衷 。与条件部分无关的if-else可以编写。
注:1、一个规则文件中可以有多个规则,每一个规则的名称不能相同;
2、规则文件执行顺序:当一个规则中有多个规则组的的时候,默认从下往上执行,同一个规则组内优先级高的先执行。