上QQ阅读APP看书,第一时间看更新
4.4 属性salience
默认值:0。
类型:integer。
属性说明:规则体被执行的顺序,每一个规则都有一个默认的执行顺序,如果不设置salience属性,规则体的执行顺序为由上到下。salience值可以是一个整数,但也可以是一个负数,其值越大,执行顺序越高,排名越靠前。Drools还支持动态配置优先级。
创建规则文件salience.drl,目录为rules/isSalience,其内容为:
package rules.isSalience rule "testSalience1" salience 10 when then System.out.println("hello testSalience1"); end rule "testSalience2" salience 20 when then System.out.println("hello testSalience2"); end rule "testSalience3" salience 5 when then System.out.println("hello testSalience3"); end
修改kmodule.xml配置文件,并添加如下配置:
<kbase name="isSalience" packages="rules.isSalience"> <ksession name="isSalience"/> </kbase>
创建RulesSalience.java文件,目录为com.rulesAttributes,其内容为:
package com.rulesAttributes; import org.junit.Test; import org.kie.api.KieServices; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; public class RulesSalience { @Test public void testSalience () { KieServices kss = KieServices.Factory.get(); KieContainer kc = kss.getKieClasspathContainer(); KieSession ks = kc.newKieSession("isSalience"); int count = ks.fireAllRules(); System.out.println("总执行了" + count + "条规则"); ks.dispose(); } }
执行testSalience()方法,结果如图4-8所示。
图4-8 salience属性的效果
属性说明中提到Drools支持动态salience,因此编辑规则文件salience.drl,并添加testSalience4规则,其内容为:
rule "testSalience4"
salience (Math.random() * 10 + 1)
when
then
System.out.println("hello testSalience4");
end
再一次执行testSalience()方法,结果如图4-9所示。
图4-9 salience属性的随机效果