Drools入门之决策表
决策表是规则文件的一种变形,是以xls/xlsx为扩展名的文件,是指通过Excel完成对规则的匹配。它是一种“精确而紧凑”的条件逻辑方式,非常适合业务场景规则。决策表并非新的技术概念(在软件术语中),其应用领域非常广泛,已经有很多企业在使用,通过实践证明决策表在某些应用中是可行的。
通俗地讲,决策表就是向电子表格中输入特定的值,并加载到Drools规则库的一种数据驱动的规则方法。
要使用决策表,首先需要引入依赖
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-decisiontables</artifactId>
<version>7.10.0.Final</version>
</dependency>
修改kmodule.xml配置文件,并添加如下配置:
<kbase name="xls" packages="rules.isXls">
<ksession name="testXls"/>
</kbase>
在测试类中新建测试方法
@Test
public void testXls() {
KieServices kieService = KieServices.Factory.get();
KieContainer kieContainer = kieService.getKieClasspathContainer();
KieSession kieSession = kieContainer.newKieSession("testXls");
kieSession.fireAllRules();
kieSession.dispose();
}
新建excel,格式如下:
决策表占位符
决策表中有一个很重要的功能—占位符,占位符功能分为两种形式:$param
和$1
,$2…
。决策表是Excel,而Excel是由单元格组成的,每一个单元格是Excel的最小单位,而$param
占位符的作用是获取每一个单元格的内容。
决策表关键字
决策表中有详细的说明,规则以RuleSet为开始,也就是说通过RuleSet来判断决策表是从哪里开始的,而且在RuleSet中可以添加注释
调用决策表的另一种方式
调用决策表的另一种方式是通过Drools工具类KieHelper。
@Test
public void testKieHelper() {
Resource dis =
ResourceFactory.newClassPathResource("rulesTwo/isXls/tableXls.xls",
RulesTable.class);
KieHelper helper = new KieHelper();
helper.addResource(dis, ResourceType.DTABLE);
KieSession ksession = helper.build().newKieSession();
int i = ksession.fireAllRules();
System.out.println( " " + i + "次");
ksession.dispose();
}
单元格合并
A8 表示:A-C的条件都均受Person的约束
B8、B9表示:都是同样的条件值合并了而已
将决策表转换为drl
@Test
public void verificationDT() throws FileNotFoundException {
File file = new File("D:\\IDEAWorkSpace\\drools\\src\\main\\resources\\rules\\isXls\\tableXls.xls");
InputStream is = new FileInputStream(file);
SpreadsheetCompiler converter = new SpreadsheetCompiler();
String drl = converter.compile(is, InputType.XLS);
System.out.println(drl);
}
Drools入门之决策表
https://www.zhaojun.inkhttps://www.zhaojun.ink/archives/drools-decision-table