前提准备:java 虚拟机
Drools核心库
Junit4.0以上版本
规则Excel模板表(将下面的图片的内容新建到Excel中)
典型的用法就是根据excel创建KnowledgeBase,然后将它丢给session执行,执行的参数和结果都在params里面
package com.xxx.yyyy;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.InputStream;
6 import java.util.Arrays;
7 import java.util.Collection;
8 import java.util.HashMap;
9 import java.util.Map;
10 import junit.framework.Assert;
11 import org.drools.KnowledgeBase;
12 import org.drools.KnowledgeBaseFactory;
13 import org.drools.builder.DecisionTableConfiguration;
14 import org.drools.builder.DecisionTableInputType;
15 import org.drools.builder.KnowledgeBuilder;
16 import org.drools.builder.KnowledgeBuilderFactory;
17 import org.drools.builder.ResourceType;
18 import org.drools.definition.KnowledgePackage;
19 import org.drools.io.ResourceFactory;
20 import org.drools.runtime.StatelessKnowledgeSession;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.junit.runners.Parameterized;
24 import org.junit.runners.Parameterized.Parameters;
25
26 @RunWith(Parameterized.class)
27 public class IsP4PTest
28 {
29 private IsP4P param;
30
31 private String extected;
32
33 public IsP4PTest(IsP4P param, String extected)
34 {
35 this.param = param;
36 this.extected = extected;
37 }
38 public Map<String, Object> getParams()
39 {
40 Map<String, Object> params = new HashMap<String, Object>();
41
42 params.put("productLine", productLine);
43 params.put("productType", productType);
44 params.put("playType", playType);
45
46 return params;
47 }
48 public void testExcel(String fileName, Map<String, Object> params)
49 throws Exception
50 {
51 System.out.println("---------------begin------------------------");
52
53 DecisionTableConfiguration dtableconfiguration = KnowledgeBuilderFactory
54 .newDecisionTableConfiguration();
55 dtableconfiguration.setInputType(DecisionTableInputType.XLS);
56 final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
57 .newKnowledgeBuilder();
58 File file = new File(
59 "F:\\juny.qu\\rule_workspace\\com.deppon.rules\\src\\main\\java\\com\\xxx\\yyyy\\"
60 + fileName);
61 InputStream is = new FileInputStream(file);
62 kbuilder.add(ResourceFactory.newInputStreamResource(is, "UTF-8"),
63 ResourceType.DTABLE);
64 if (kbuilder.hasErrors())
65 {
66 System.out.println(kbuilder.getErrors().toString());
67 }
68 Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
69 KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
70 kbase.addKnowledgePackages(pkgs);
71
72 StatelessKnowledgeSession ksession = kbase
73 .newStatelessKnowledgeSession();
74 ksession.execute(Arrays.asList(new Object[] { params }));
75
76 System.out.println("---------------end------------------------");
77 }
78
79
80 @Parameters
81 public static Collection<?> contructData()
82 {
83 return Arrays.asList(new Object[][] {
84 { new IsP4P("搜索推广", "true", "null"), "true" },
85 { new IsP4P("网盟推广", "true", "null"), "true" },
86 { new IsP4P("掘金推广", "true", "非轮播"), "false" },
87 { new IsP4P("其他", "false", "其他"), "other" } });
88 }
89
90 @Test
91 public void testP4P() throws Exception
92 {
93 Map<String, Object> params = new HashMap<String, Object>();
94 params.putAll(param.getParams());
95 testExcel("ka/isP4P.xls", params);
96 Assert.assertEquals(extected, params.get("isP4P"));
97 }
98 }
99
100
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.InputStream;
6 import java.util.Arrays;
7 import java.util.Collection;
8 import java.util.HashMap;
9 import java.util.Map;
10 import junit.framework.Assert;
11 import org.drools.KnowledgeBase;
12 import org.drools.KnowledgeBaseFactory;
13 import org.drools.builder.DecisionTableConfiguration;
14 import org.drools.builder.DecisionTableInputType;
15 import org.drools.builder.KnowledgeBuilder;
16 import org.drools.builder.KnowledgeBuilderFactory;
17 import org.drools.builder.ResourceType;
18 import org.drools.definition.KnowledgePackage;
19 import org.drools.io.ResourceFactory;
20 import org.drools.runtime.StatelessKnowledgeSession;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.junit.runners.Parameterized;
24 import org.junit.runners.Parameterized.Parameters;
25
26 @RunWith(Parameterized.class)
27 public class IsP4PTest
28 {
29 private IsP4P param;
30
31 private String extected;
32
33 public IsP4PTest(IsP4P param, String extected)
34 {
35 this.param = param;
36 this.extected = extected;
37 }
38 public Map<String, Object> getParams()
39 {
40 Map<String, Object> params = new HashMap<String, Object>();
41
42 params.put("productLine", productLine);
43 params.put("productType", productType);
44 params.put("playType", playType);
45
46 return params;
47 }
48 public void testExcel(String fileName, Map<String, Object> params)
49 throws Exception
50 {
51 System.out.println("---------------begin------------------------");
52
53 DecisionTableConfiguration dtableconfiguration = KnowledgeBuilderFactory
54 .newDecisionTableConfiguration();
55 dtableconfiguration.setInputType(DecisionTableInputType.XLS);
56 final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
57 .newKnowledgeBuilder();
58 File file = new File(
59 "F:\\juny.qu\\rule_workspace\\com.deppon.rules\\src\\main\\java\\com\\xxx\\yyyy\\"
60 + fileName);
61 InputStream is = new FileInputStream(file);
62 kbuilder.add(ResourceFactory.newInputStreamResource(is, "UTF-8"),
63 ResourceType.DTABLE);
64 if (kbuilder.hasErrors())
65 {
66 System.out.println(kbuilder.getErrors().toString());
67 }
68 Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
69 KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
70 kbase.addKnowledgePackages(pkgs);
71
72 StatelessKnowledgeSession ksession = kbase
73 .newStatelessKnowledgeSession();
74 ksession.execute(Arrays.asList(new Object[] { params }));
75
76 System.out.println("---------------end------------------------");
77 }
78
79
80 @Parameters
81 public static Collection<?> contructData()
82 {
83 return Arrays.asList(new Object[][] {
84 { new IsP4P("搜索推广", "true", "null"), "true" },
85 { new IsP4P("网盟推广", "true", "null"), "true" },
86 { new IsP4P("掘金推广", "true", "非轮播"), "false" },
87 { new IsP4P("其他", "false", "其他"), "other" } });
88 }
89
90 @Test
91 public void testP4P() throws Exception
92 {
93 Map<String, Object> params = new HashMap<String, Object>();
94 params.putAll(param.getParams());
95 testExcel("ka/isP4P.xls", params);
96 Assert.assertEquals(extected, params.get("isP4P"));
97 }
98 }
99
100
1 package com.xxx.yyyy;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileNotFoundException;
6 import java.io.InputStream;
7
8 import org.drools.decisiontable.InputType;
9 import org.drools.decisiontable.SpreadsheetCompiler;
10 import org.junit.Test;
11
12 public class SpreadsheetCompilerTest {
13
14 @Test
15 public void compile() throws FileNotFoundException{
16 //File file = new File("F:\\juny.qu\\rule_workspace\\com.deppon.rules\\src\\main\\java\\com\\xxx\\yyyy\\ka\\isP4P.xls");
17 //File file = new File("F:\\collections_study\\规则引擎系统开发小组\\规则引擎doc\\02开发\\06-详细设计\\增值服务折扣测试1.xls");
18 File file = new File("F:\\rules.xlsx");
19
20 InputStream is = new FileInputStream(file);
21
22 SpreadsheetCompiler converter = new SpreadsheetCompiler();
23 String drl = converter.compile(is, InputType.XLS); //--------exception here--------
24 System.out.println("\n\n" + drl);
25
26 }
27
28 }
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileNotFoundException;
6 import java.io.InputStream;
7
8 import org.drools.decisiontable.InputType;
9 import org.drools.decisiontable.SpreadsheetCompiler;
10 import org.junit.Test;
11
12 public class SpreadsheetCompilerTest {
13
14 @Test
15 public void compile() throws FileNotFoundException{
16 //File file = new File("F:\\juny.qu\\rule_workspace\\com.deppon.rules\\src\\main\\java\\com\\xxx\\yyyy\\ka\\isP4P.xls");
17 //File file = new File("F:\\collections_study\\规则引擎系统开发小组\\规则引擎doc\\02开发\\06-详细设计\\增值服务折扣测试1.xls");
18 File file = new File("F:\\rules.xlsx");
19
20 InputStream is = new FileInputStream(file);
21
22 SpreadsheetCompiler converter = new SpreadsheetCompiler();
23 String drl = converter.compile(is, InputType.XLS); //--------exception here--------
24 System.out.println("\n\n" + drl);
25
26 }
27
28 }
运行结果如下:package rule_table;
//generated from Decision Tableimport java.util.*;
// rule values at B22, header at B17
rule "ContractP4P_22"
when
$constract:java.util.HashMap($constract.get("productLine")=="搜索推广")
$constract.get("productType")=="true"
$constract.get("playType")=="null"
then
$constract.put("isP4P","true");
end
// rule values at B23, header at B17
rule "ContractP4P_23"
when
$constract.get("playType")=="null"
then
$constract.put("isP4P","true");
end
// rule values at B24, header at B17
rule "ContractP4P_24"
when
$constract:java.util.HashMap($constract.get("productLine")=="掘金推广")
$constract.get("productType")=="true"
$constract.get("playType")=="非轮播"
then
$constract.put("isP4P","false");
end
// rule values at B25, header at B17
rule "ContractP4P_25"
when
$constract:java.util.HashMap($constract.get("productLine")=="其他")
$constract.get("productType")=="false"
$constract.get("playType")=="其他"
then
$constract.put("isP4P","other");
end
- 什么时候考虑使用规则表
如果规则可以表示成 templates+data(模板+数据),可以考虑使用 decision tables。在决策表的每一行,采集数据和模板一起生成规则。使用基于决策表的Spreadsheet的API在Drools-decisiontables模块中。只有一个类:SpreadsheetCompiler. 这个类可以操作各种格式的Spreadsheet,并生成DRL规则(然后就可以常规的方式使用)。
一个典型的规则表的格式
决策表中的关键字说明:
相关推荐
- **决策表(Decision Table)**:通过Excel或CSV格式的表格定义规则,适合非技术人员编辑。 - **流程引擎(jBPM)**:与Drools集成,支持复杂的业务流程管理。 - **事件处理(Complex Event Processing, CEP)**...
- **入门**:学习如何创建和使用决策表来定义规则。 - **加强**:了解如何构建更复杂的决策逻辑。 - **整合SpringBoot和MybatiesPlus**:在SpringBoot项目中利用MybatiesPlus进行数据库操作,结合Drools执行决策...
### 规则引擎Drools使用手册:4.0版更新要点详解 #### 一、Drools 4.0新特性概览 Drools 4.0是一次重要的更新,相较于之前的Drools 3.0.x系列,在语言表达、引擎性能以及工具实用性等方面都有显著提升。以下为此次...
Drools 决策表的简单使用 ...Drools 官方文档提供了详细的决策表使用指南和示例代码。 Drools 决策表提供了一种简单易用的规则表示方式,允许业务人员使用 Excel 文件来编写业务规则,而不需要学习编写 DRL 文件。
后面通过搭建具体的项目并结合springboot框架联合使用Drools的相关知识包括决策表的使用,囊括一般项目中所需要的知识点,理论结合实际,让真正入门到熟练。本资源是...
Drools是一款强大的规则引擎,基于Java平台,用于实现复杂的业务决策逻辑。它采用领域特定语言(DSL)来编写规则,使得非技术人员也能理解和维护。本示例程序"Drools决策表示例"旨在帮助开发者更好地理解和应用...
为drools 规则引擎的使用demo,包括,决策表、领域语言、CEP(复杂事件处理)等规则引擎。 springboot-drools-dynamic-db 为drools 规则引擎基于数据库实现动态规则 springboot-drools-dynamic-rules 为drools ...
6. **决策表(Decision Table)**:Drools支持使用Excel或CSV格式的决策表来定义规则,这使得非技术人员也能参与规则的制定。文档会讲解如何创建和使用决策表。 7. **流程图(Flow Diagrams)**:Drools也支持通过...
5. **决策表(Decision Table)**:Drools支持使用Excel或CSV格式的决策表来定义规则,这种方式更直观且易于理解,适合非程序员使用。 6. **rete算法**:Drools使用Rete算法进行规则匹配,这是一种高效的算法,能...
Drools,这个强大的开源规则引擎,是Java领域中用于实现业务规则管理和决策逻辑的核心工具。它以其高效、灵活和可扩展的特性,在各种复杂的业务场景中得到了广泛应用。在这个名为"Drools规则引擎样例系统"的项目中,...
Drools不仅支持传统的规则引擎功能,还提供了工作流、事件处理和决策表等功能,广泛应用于金融、保险、医疗等领域的业务流程自动化。 2. **规则语言**: Drools使用的是领域特定语言(DSL),如DRL(Drools Rule ...
4. **drools-examples**:这个文件夹可能包含了Drools的示例项目,用于演示如何使用Drools引擎创建、管理和执行规则。通常,这些例子会涵盖各种场景,如决策表、规则流、以及如何集成Drools到实际应用中。 5. **...
Drools的核心概念包括规则、工作流和决策表。规则是Drools的基础,它由条件(LHS,Left Hand Side)和动作(RHS,Right Hand Side)两部分组成。条件部分定义了何时应用规则,而动作部分定义了当条件满足时应执行的...
Drools还提供了工作流引擎(Guvnor)和决策表(Decision Table)等功能,使得非技术人员也能通过图形化界面进行规则管理和编辑。决策表允许用户用Excel或CSV格式定义规则,简化了规则的维护。 在实际应用中,Drools...
4. **决策表**:Drools支持使用Excel或CSV格式的决策表来定义规则,这种方式对非技术人员更加友好,便于规则的维护和审查。 5. **融合JBOSS BRMS**:Drools是JBoss Business Automation的一部分,与BRMS(Business ...
Drools 是一个开源的Java决策管理平台,它允许开发者使用规则语言来编写业务逻辑,这些规则可以按特定顺序执行,以处理复杂的业务场景。 在 Drools 中,规则的执行顺序主要由以下因素决定: 1. **规则优先级**:...
教程会演示如何使用Excel或CSV文件创建决策表,并将其导入到Drools中。 在实战部分,教程会通过具体的案例展示如何在实际项目中集成Drools,包括数据对象的设计、规则的触发和结果的处理等。同时,还会介绍如何进行...
5. **决策表(Decision Table)**:Drools支持通过Excel或CSV格式的决策表来定义规则,这种方式更适合非技术人员理解和维护。 6. **优化器**:Drools的优化器可以根据规则集自动调整执行策略,以提高性能。 **使用...