基于决策表的入门案例:

第一步:创建maven工程并配置pom.xml文件

<dependency><groupId>org.drools</groupId><artifactId>drools-decisiontables</artifactId><version>7.10.0.Final</version>
</dependency>
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version>
</dependency>

第二步:创建实体类PersonInfoEntity

package com.glodon.drools.entity;/*** @Author: yinjw-b* @Date: 2020/12/25 14:40* @Description:*/
public class PersonInfoEntity {private String sex;private int age;private double salary;public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}
}

第三步:创建xls规则文件(这里面的字符都是英文)

第四步:创建单元测试

package com.glodon.drools.test;import com.glodon.drools.entity.PersonInfoEntity;
import org.drools.decisiontable.InputType;
import org.drools.decisiontable.SpreadsheetCompiler;
import org.junit.Test;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.KieSession;
import org.kie.internal.utils.KieHelper;import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;/*** @Author: yinjw-b* @Date: 2020/12/25 14:42* @Description:*/
public class test1 {@Testpublic void test1() throws Exception{String realPath = "d:\\testRule.xlsx";//指定决策表xls文件的磁盘路径File file = new File(realPath);InputStream is = new FileInputStream(file);SpreadsheetCompiler compiler = new SpreadsheetCompiler();String drl = compiler.compile(is, InputType.XLS);System.out.println(drl);KieHelper kieHelper = new KieHelper();kieHelper.addContent(drl, ResourceType.DRL);KieSession session = kieHelper.build().newKieSession();PersonInfoEntity personInfoEntity = new PersonInfoEntity();personInfoEntity.setSex("男");personInfoEntity.setAge(35);personInfoEntity.setSalary(1000);List<String> list = new ArrayList<>();session.setGlobal("listRules",list);session.insert(personInfoEntity);session.getAgenda().getAgendaGroup("sign").setFocus();session.fireAllRules();for (String s : list) {System.out.println(s);}session.dispose();}
}

运行代码,控制台输出如下:

C:\Java\jdk1.8.0_91\bin\java.exe ...
package rules;
//generated from Decision Table
import com.glodon.drools.entity.PersonInfoEntity;
import java.util.List;
global java.util.List listRules;
// rule values at B10, header at B5
rule "personCheck_10"salience 65535agenda-group "sign"when$person:PersonInfoEntity(sex!="男")thenlistRules.add("性别不对");
end// rule values at B11, header at B5
rule "personCheck_11"salience 65534agenda-group "sign"when$person:PersonInfoEntity(age<22||age>25, salary<10000)thenlistRules.add("年龄不适合");listRules.add("工资low太低了");
end// rule values at B12, header at B5
rule "personCheck_12"salience 65533agenda-group "sign"when$person:PersonInfoEntity(salary<10000)thenlistRules.add("工资太低了");
end15:14:56.069 [main] INFO org.kie.api.internal.utils.ServiceDiscoveryImpl - Loading kie.conf from  jar:file:/D:/webapps/repository/org/drools/drools-decisiontables/7.10.0.Final/drools-decisiontables-7.10.0.Final.jar!/META-INF/kie.conf in classloader sun.misc.Launcher$AppClassLoader@18b4aac2
15:14:56.073 [main] INFO org.kie.api.internal.utils.ServiceDiscoveryImpl - Adding Service org.drools.decisiontable.DecisionTableProviderImpl15:14:56.074 [main] INFO org.kie.api.internal.utils.ServiceDiscoveryImpl - Loading kie.conf from  jar:file:/D:/webapps/repository/org/drools/drools-core/7.10.0.Final/drools-core-7.10.0.Final.jar!/META-INF/kie.conf in classloader sun.misc.Launcher$AppClassLoader@18b4aac2
15:14:56.076 [main] INFO org.kie.api.internal.utils.ServiceDiscoveryImpl - Adding Service org.drools.core.io.impl.ResourceFactoryServiceImpl15:14:56.077 [main] INFO org.kie.api.internal.utils.ServiceDiscoveryImpl - Adding Service org.drools.core.marshalling.impl.MarshallerProviderImpl15:14:56.077 [main] INFO org.kie.api.internal.utils.ServiceDiscoveryImpl - Adding Service org.drools.core.concurrent.ExecutorProviderImpl15:14:56.077 [main] INFO org.kie.api.internal.utils.ServiceDiscoveryImpl - Loading kie.conf from  jar:file:/D:/webapps/repository/org/drools/drools-compiler/7.10.0.Final/drools-compiler-7.10.0.Final.jar!/META-INF/kie.conf in classloader sun.misc.Launcher$AppClassLoader@18b4aac2
15:14:56.081 [main] INFO org.kie.api.internal.utils.ServiceDiscoveryImpl - Adding Service org.drools.compiler.kie.builder.impl.KieServicesImpl15:14:56.083 [main] INFO org.kie.api.internal.utils.ServiceDiscoveryImpl - Adding Service org.drools.compiler.builder.impl.KnowledgeBuilderFactoryServiceImpl15:14:56.083 [main] INFO org.kie.api.internal.utils.ServiceDiscoveryImpl - Loading kie.conf from  jar:file:/D:/webapps/repository/org/kie/kie-internal/7.10.0.Final/kie-internal-7.10.0.Final.jar!/META-INF/kie.conf in classloader sun.misc.Launcher$AppClassLoader@18b4aac2
15:14:56.084 [main] INFO org.kie.api.internal.utils.ServiceDiscoveryImpl - Adding Service org.kie.internal.services.KieAssemblersImpl15:14:56.085 [main] INFO org.kie.api.internal.utils.ServiceDiscoveryImpl - Adding Service org.kie.internal.services.KieRuntimesImpl15:14:56.085 [main] INFO org.kie.api.internal.utils.ServiceDiscoveryImpl - Adding Service org.kie.internal.services.KieWeaversImpl15:14:56.085 [main] INFO org.kie.api.internal.utils.ServiceDiscoveryImpl - Adding Service org.kie.internal.services.KieBeliefsImpl15:14:56.907 [main] INFO org.drools.compiler.kie.builder.impl.KieRepositoryImpl - KieModule was added: MemoryKieModule[releaseId=org.default:artifact:1.0.0]
15:14:56.908 [main] DEBUG org.drools.compiler.kie.builder.impl.KieRepositoryImpl - Cannot load a KieRepositoryScanner, using the DummyKieScanner
15:14:57.093 [main] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is now FIRING_ALL_RULES
15:14:57.123 [main] DEBUG org.drools.core.common.DefaultAgenda - State was FIRING_ALL_RULES is now HALTING
15:14:57.124 [main] DEBUG org.drools.core.common.DefaultAgenda - State was HALTING is now INACTIVE
年龄不适合
工资low太低了
工资太低了
15:14:57.124 [main] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is now DISPOSEDProcess finished with exit code 0

决策表语法:

关键字 说明 是否必须
RuleSet 相当于drl文件中的package 必须,只能有一个。如果没有设置RuleSet对应的值则使用默认值rule_table
Sequential 取值为Boolean类型。true表示规则按照表格自上到下的顺序执行,false表示乱序 可选
Import 相当于drl文件中的import,如果引入多个类则类之间用逗号分隔 可选
Variables 相当于drl文件中的global,用于定义全局变量,如果有多个全局变量则中间用逗号分隔 可选
RuleTable 它指示了后面将会有一批rule,RuleTable的名称将会作为以后生成rule的前缀 必须
CONDITION 规则条件关键字,相当于drl文件中的when。下面两行则表示 LHS 部分,第三行则为注释行,不计为规则部分,从第四行开始,每一行表示一条规则 每个规则表至少有一个
ACTION 规则结果关键字,相当于drl文件中的then 每个规则表至少有一个
NO-LOOP 相当于drl文件中的no-loop 可选
AGENDA-GROUP 相当于drl文件中的agenda-group 可选

在决策表中还经常使用到占位符,语法为$后面加数字,用于替换每条规则中设置的具体值。

Drools规则引擎使用excel决策表相关推荐

  1. drools规则引擎可视化_一文看懂开源工作流引擎 Flowable「转」

    原文链接:[https://xie.infoq.cn/article/ece75889c715e0bc87a73e44c]. 一.工作流引擎使用场景 工作流在企业管理系统中是高频使用的功能,一个最常见 ...

  2. 详解:Drools规则引擎探究

    引入 ▐ 问题引入 天猫奢品业务方为了吸引更多的新客,和提高会员的活跃度,做了一期活动,通过购买天猫奢品频道内的任意商品就赠送特殊积分,积分可以直接兑换限量的奢品商品.假如业务方给的规则如下: 主刃同 ...

  3. 使用 Drools 规则引擎实现业务逻辑,可调试drl文件

    http://www.srcsky.com/tech/arts/389.html 代码下载http://download.csdn.net/detail/zhy011525/2462313 使用 Dr ...

  4. drools规则引擎因为内存泄露导致的内存溢出

    进入这个问题之前,先了解一下drools: 在很多行业应用中比如银行.保险领域,业务规则往往非常复杂,并且规则处于不断更新变化中,而现有很多系统做法基本上都是将业务规则绑定在程序代码中. 主要存在的问 ...

  5. SpringBoot2 整合 Drools规则引擎,实现高效的业务规则

    本文源码:GitHub·点这里 || GitEE·点这里 一.Drools引擎简介 1.基础简介 Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的 ...

  6. SpringBoot整合Drools规则引擎动态生成业务规则

    最近的项目中,使用的是flowable工作流来处理业务流程,但是在业务规则的配置中,是在代码中直接固定写死的,领导说这样不好,需要规则可以动态变化,可以通过页面去动态配置改变,所以就花了几天时间去研究 ...

  7. drools规则引擎 java_Drools规则引擎的使用总结

    前一段时间在开发了一个做文本分析的项目.在项目技术选型的过程中,尝试使用了Drools规则引擎.让它来作为项目中有关模式分析和关键词匹配的任务.但后来,因为某种原因,还是撇开了Drools.现将这个过 ...

  8. 大数据风控项目实战 Drools规则引擎

    可以借鉴的干货 1,统一存储服务,包含:多种存储库连接封装和服务封装 在统一存储服务 2.获取配置的环境 类:EnvVariable 一.风控项目介绍 对一个复杂支付系统提供统一.全面.高效的风险控制 ...

  9. drools规则引擎动态配置规则

    先说下我的业务需求背景,最近公司要推出运营活动,根据用户行为送用户积分:比如用户注册送.首次消费送,非首次消费送.累积消费送.针对我们这个的特殊要求是跟具体规则绑定:比如说 规则1 用户累积消费首次达 ...

最新文章

  1. “ Error:(1, 1) java: 非法字符: ‘\ufeff‘ ”错误的解决方法
  2. 斯坦福证明神经网络能直接在光学芯片上训练
  3. nacos单机模式使用mysql库_Nacos docker 单机模式,mysql 搭建
  4. SqlServer 中的增删改查语句的语法
  5. java403forbidden_java – Spring boot – 返回403 Forbidden而不是重定向到登录页面
  6. 广度优先搜索——字串变换(洛谷 P1032)
  7. 毛概社会实践报告3000字
  8. python之数据运算、字典、列表
  9. AjaxPro实现方法
  10. 计算机放样在钢结构应用,钢结构放样是什么,怎么操作?
  11. 茶几 清明上河图 诗句
  12. 如何撰写一篇研究论文的介绍(introduction)
  13. C语言基础-计算一个整数各个位数之和
  14. 统计学基础专栏04---回归和预测
  15. 英文版ubuntu系统如何添加中文拼音输入法
  16. 6种Python反反爬虫技术,看完后我的爬虫技术提升了
  17. 糖价回暖,甩掉包袱的南宁糖业能跑多快?
  18. opencv基础之--图片颜色反转
  19. OpenStack硬件管理加速利器:Cyborg
  20. css3使用transform出现字体模糊的解决办法

热门文章

  1. auto 和 auto
  2. Android中上下文菜单选项--ContextMenu
  3. 对接阿里云短信服务(附视频教程)
  4. python中使用“[函数名].[变量名]”声明变量
  5. latex中公式的上下限和左右如何改变,即独立公式和行间公式的切换
  6. 推荐10个Vue 3.0开发的开源前端项目
  7. 模拟电路技术之基础知识(二)
  8. 关于error C2065 错误
  9. win7美化_极致美化 | 我们如何把 Windows「改造」成 mac OS
  10. 智慧CAD手机看图隐私政策