![Drools规则引擎技术指南](https://wfqqreader-1252317822.image.myqcloud.com/cover/566/26833566/b_26833566.jpg)
上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所示。
![076-1](https://epubservercos.yuewen.com/CC3313/15279444705239206/epubprivate/OEBPS/Images/076-1.jpg?sign=1738910258-oI1Gpv1YZbHCeXy3b1vrzjjvzb5NmFd7-0-5d585bb41eee0139bbd67c9dc375cfb7)
图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所示。
![077-1](https://epubservercos.yuewen.com/CC3313/15279444705239206/epubprivate/OEBPS/Images/077-1.jpg?sign=1738910258-sVkFpdGKlPR4e6DpUABhwIEiu3OHsqyZ-0-82202f3f827f3373b8e8301c9b0c41ff)
图4-9 salience属性的随机效果