规则属性(attributes)
参考b站黑马博学谷Drools视频,侵权请联系删除
规则属性位于规则体的rulename和when之间。常用的有:

(1)enable属性
enabled属性对应的取值为true和false,默认值为true。用于指定当前规则是否启用,如果设置的值为false则当前规则无论是否匹配成功都不会触发。 如:

(2)dialect属性
dialec1t属性用于指定当前规则使用的语言类型,取值为java和mvel,默认值为java。
注: mvel是一种基于java语法的表达式语言。mvel像正则表达式一样,有直接支持集合、数组和字符串匹配的操作符。mvel还提供了用来配置和构造字符串的模板语言。mvel表达式内容包括属性表达式,布尔表达式,方法调用,变量赋值,函数定义等。
(3)salience属性
salience属性用于指定规则的执行优先级,取值类型为Integer,数值越大越优先执行。每个规则都有一个默认的执行顺序,如果不设置salience属性,规则体的执行顺序为由上到下。
(4)no-loop属性
no-loop属性取值类型为Boolean,默认值为false。用于防止死循环,当规则通过update之类的函数修改了Fact对象时,可能使当前规则再次被激活从而导致死循环。例如下面的情况就会导致死循环:

可通过no-loop true防止死循环。

(5) activation-group属性
activation-group属性是指激活分组,具有相同分组名称的规则只能有一个规则被触发,取值为String类型。例如:

上面的两个规则因为属于同一个分组,所以只有一个触发了。同一个分组中的多个规则如果都能够匹配成功,具体哪一个最终能够被触发可以通过salience属性确定。
(6) agenda-group属性
agenda-group属性为议程分组,属于另一种可控的规则执行方式。用户可以通过设置agenda-group来控制规则的执行,只有获取焦点的组中的规则才会被触发。可以通过java代码让指定组获得焦点:

(7) auto-focus属性
auto-focus属性为自动获取焦点,取值类型为Boolean,默认值为false,一般结合agenda-group属性使用,当一个议程分组未获取焦点时,可以设置auto-focus属性为true来控制。
(8) timer属性
timer属性可以通过定时器的方式指定规则执行的时间,使用方式有两种:
- 方式一:
timer (int: <initial delay> <repeat interval>?)此种方式遵循java.util.Timer对象的使用方式,第一个参数表示几秒后执行,第二个参数表示每隔几秒执行一次,第二个参数为可选。

- 方式二:
timer(cron: <cron expression>)此种方式使用标准的unix cron表达式的使用方式来定义规则执行的时间。

(9) date-effective属性
date-effective属性用于指定规则的生效时间,即只有当前系统时间大于等于设置的时间或者日期规则才有可能触发。默认日期格式为: dd-MMM-yyy。用户也可以自定义日期格式。

在代码中设置drools的日期格式:

(10) date-expires属性
date-expires属性用于指定规则的失效时间,即只有当前系统时间小于设置的时间或者日期规则才有可能触发。与date-effective属性类似,默认日期格式为: dd-MMM-yyyy。用户也可以自定义日期格式。
本文介绍了Drools规则引擎的常用属性,包括enable、dialect、salience、no-loop、activation-group、agenda-group、auto-focus、timer、date-effective和date-expires,详细解析了这些属性的作用和用法,帮助理解如何控制规则的执行行为。
3501

被折叠的 条评论
为什么被折叠?



