规则引擎Drools使用 第七篇 Drools 常见的属性

本文介绍了Drools中的关键属性,如salience(优先级)、dialect(语言类型)、enabled(启用状态)、no-loop(防止死循环)、activation-group(激活分组)和agenda-group(议程分组),并通过示例展示了如何在实际项目中运用这些属性。

Drools的一些属性

Drools中提供的属性如下表(部分属性): 

接下来分别写一些demo介绍下这些属性的使用。

salience属性

     salience属性用于指定规则的执行优先级,取值类型为Integer。数值越大越优先执行。每个规则都有一个默认的执行顺序,如果不设置salience属性,规则体的执行顺序为由上到下。

看下这个demo:

package testsalience
​
rule "rule_1"
    salience 9
    when
        eval(true)
    then
        System.out.println("规则rule_1触发");
end
​
rule "rule_2"
    salience 10
    when
        eval(true)
    then
        System.out.println("规则rule_2触发");
end
​
rule "rule_3"
    salience 8
    when
        eval(true)
    then
        System.out.println("规则rule_3触发");
end

      通过控制台可以看到,规则文件执行的顺序是按照我们设置的salience值由大到小顺序执行的。建议在编写规则时使用salience属性明确指定执行优先级。

dialect属性

dialect属性用于指定当前规则使用的语言类型,取值为java和mvel,默认值为java。

注:mvel是一种基于java语法的表达式语言。mvel像正则表达式一样,有直接支持集合、数组和字符串匹配的操作符。mvel还提供了用来配置和构造字符串的模板语言。mvel表达式内容包括属性表达式,布尔表达式,方法调用,变量赋值,函数定义等。

enabled属性

enabled属性对应的取值为true和false,默认值为true。

用于指定当前规则是否启用,如果设置的值为false则当前规则无论是否匹配成功都不会触发。

rule "rule_comparison_notMemberOf" 
  //指定当前规则不可用,当前规则无论是否匹配成功都不会执行 
 enabled false 
 when
     ComparisonOperatorEntity(names not memberOf list)
 then
     System.out.println("规则rule_comparison_notMemberOf触发");
end

no-loop属性

      no-loop属性用于防止死循环,当规则通过update之类的函数修改了Fact对象时,可能使当前规则再次被激活从而导致死循环。取值类型为Boolean,默认值为false。

编写一个测试规则:

package testnoloop
import com.droo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员路同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值