记录一下drl的编写语言规则。
1.基本格式
package
import
function // Optional
query // Optional
declare // Optional
global // Optional
rule "rule name"
// Attributes
when
// Conditions
then
// Actions
end
rule "rule2 name"
package、import的使用方式以及规则和java的一致。
2. function函数
drl文件中的function函数不能放在java代码块中调用(当然可以写个java方法在drl里面调用。。。)
第一种函数使用方式,直接在drl文件中定义function
第二种函数使用方式,导入java静态方法做函数,在drl直接引用(这个使用的也很多,主要是可以将业务模块和drl串联,有很大的扩展空间)、
3. drl内部查询
query方法是定义查询方式的关键字,和rule一样,每个查询函数需要有唯一的名称
“people under the age of 21”整个字符串作为query的名称,在内部写筛选条件。
使用方式:
QueryResults results = kieSession.getQueryResults("规则名称");
获取的results可和正常的List一样使用for循环或者增强型for循环。
4. 参数定义
参数内置样例
默认情况下参数顺序和定义一致,如果需要自定义调整顺序但是不更改原始参数,可以使用@position标注顺序,例如:
declare Location
thing : String @position(1)
local : String @position(0)
使用样例
results = kieSession.getQueryResults("规则名称",new Object[]{x,y})
枚举定义样例
declare enum DaysOfWeek
SUN("sunday"),MON("monday"),TUE("tursday")
rule "test"
when
$temp : Location(day == DaysOfWeek.SUN)
then
...
end
5. 标签
@role 此标签确定在复杂事件处理期间,给定的事实类型是作为常规事实处理还是作为 Drools 引擎中的事件处理。
默认参数: fact
支持的参数: fact , event
@timestamp 自动分配给 Drools 引擎中的每个事件。默认情况下,时间由会话时钟提供,并在插入 Drools 引擎的工作内存时分配给事件。您可以指定自定义时间戳属性,而不是会话时钟添加的默认时间戳
@duration 这个标签决定了 Drools 引擎中事件的持续时间。事件可以是基于间隔的事件或时间点事件。基于间隔的事件有一个持续时间,并在
Drools 引擎的工作内存中持续存在,直到它们的持续时间结束。时间点事件没有持续时间,本质上是持续时间为零的基于间隔的事
件。默认情况下,Drools 引擎中的每个事件的持续时间为零。您可以指定自定义持续时间属性而不是默认值
@expires
这个标签决定了一个事件在 Drools 引擎的工作内存中过期之前的持续时间。默认情况下,当事件不再匹配并激活任何当前规则时,事
件就会过期。您可以定义事件应在多长时间后过期。此标签定义还覆盖了根据 KIE 基础中的时间约束和滑动窗口计算的隐式过期偏移
量。该标签仅在 Drools 引擎以流模式运行时可用
@typesafe
此选项卡确定给定的事实类型是否在使用或不使用类型安全的情况下进行编译。默认情况下,所有类型声明都在启用类型安全的情况下
编译。您可以将此行为覆盖为类型不安全的评估,其中所有约束都作为 MVEL 约束生成并动态执行。这在处理没有任何泛型或混合类
型集合的集合时很有用
@serialVersionUID
此标记定义 serialVersionUID 事实声明中可序列化类的标识值。如果可序列化类未显式声明 a serialVersionUID ,则序列化运行
时会根据 serialVersionUID 类的各个方面为该类计算默认值,如Java 对象序列化规范
(https://docs.oracle.com/javase/10/docs/specs/serialization/index.html)中所述。但是,为了获得最佳反序列化结果以及与序列化 KIE 会
话的更大兼容性,请 serialVersionUID 根据需要在相关类或 DRL 声明中设置
@key
此标记使事实类型属性能够用作事实类型的键标识符。生成的类然后可以实现 equals() 和 hashCode() 方法来确定该类型的两个实例
是否彼此相等。Drools 引擎还可以使用所有关键属性作为参数生成构造函数
@position
此标记确定声明的事实类型属性或字段在位置参数中的位置,覆盖默认声明的属性顺序。您可以使用此标记来修改模式中的位置约束,
同时在类型声明和位置参数中保持一致的格式。您只能将此标记用于类路径上的类中的字段。如果单个类中的某些字段使用此标记而某
些不使用,则没有此标记的属性按声明的顺序位于最后。支持类的继承,但不支持方法的接口。