Drools 决策表的使用
决策表简介
引用官方的话
决策表是一个“精确而紧凑的”表示条件逻辑的方式,非常适合商业级别的规则。
目前决策表支持xls格式和csv格式。决策表与现有的drools drl文件使用可以无缝替换。
什么时候使用决策表
-
规则能够被表达为模板+数据的格式,考虑使用决策表
-
很少量的规则不建议使用决策表
-
不是遵循一组规则模板的规则也不建议使用决策表
决策表格式
RuleSet 和 drl 文件中的 package 是一样
-
RuleSet 和 drl 文件中的 package 是一样
-
Sequential 与 drl 文件中的属性优先级是一样的,只是这边为 true
-
Functions 与 drl 文件中的 function 是一样的
-
RuleTable 表示 rule name,必添
-
CONDITION ACTION 表示 rule 中的 LHS RHS 部分 至少要有一个
-
从CONDITION 下面两行则表示 LHS 部分 第三行则为注释行,不计为规则部分,从第
四行开始,每一行表示一条规则。 -
$param 表示占位符会替换下面每一行的值,生成一条规则。
决策表编译
首先需要引入maven的pom依赖:
<dependency> <groupId>org.drools</groupId> <artifactId>drools-decisiontables</artifactId> <version>7.0.0.Final</version> </dependency>
可以通过以下两个方式来对决策表进行解析生成drl文件:
@Test public void checkDrl() throws FileNotFoundException { File file = new File("E://GitHub//respo//drools-lesson//src//main//resources//decision.xls"); InputStream is = new FileInputStream(file); SpreadsheetCompiler compiler = new SpreadsheetCompiler(); String drl = compiler.compile(is, InputType.XLS); System.out.println(drl); } @Test public void checkDrl2() throws FileNotFoundException { SpreadsheetCompiler compiler = new SpreadsheetCompiler(); String drl = compiler.compile(ResourceFactory.newClassPathResource("com/decision/decision.xls"), InputType.XLS); System.out.println(drl); }
可以通过查看生成的drl内容确定决策表的语法及业务是预期的。
与drl文件方式无缝结合
像配置drl文件格式的规则一样,我们要执行一个xls决策表操作非常简单,只用把drl文件替换为对应的xls文件即可。
具体配置如下:
kmodule.xml中配置xls所在的resource目录对应的session:
<kbase name="decision-kbase" packages="com.decision"> <ksession name="decision-rules"/> </kbase>
同时将决策表的xls文件放置在com.decision包中,为了减少不必要的麻烦,决策表中定义的RuleSet值也应该是com.decision。
同样的,在代码中只需像正常调用代码一样获取KieSession进行后续业务处理即可:
@Test public void testDecision(){ KieSession kieSession = this.getKieSessionBySessionName("decision-rules"); kieSession.fireAllRules(); kieSession.dispose(); }
打印的结果与drl文件无二。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15180.html