Drools规则引擎快速入门(一)
目录
一、Drools环境集成
二、drools规则引擎开发实现的具体步骤如下:
三、drools快速入门
?四、开发实现
第一步:创建maven项目droolsSpring,在创建好的项目pom.xml文件中添加drools依赖包
第二步:根据drools要求在maven项目目录下创建?resources/META-INF/kmodule.xml
第三步:创建订单实体类Order
第四步:创建规则文件resources/rules/score-rules.drl,规则文件的内容如下:
第五步:编写测试类TestDrools。
一、Drools环境集成
在项目中集成使用drools时,既可以独立使用也可以整合spring使用,如果是单独使用直接引入maven依赖包:如下
<dependency><groupId>org.kie</groupId><artifactId>kie-spring</artifactId><version>7.68.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.68.0.Final</version></dependency>
如果使用的开发工具是IDEA,那么在file->setting目录下
点击plugins插件市场中搜索安装drools插件 ,如图
二、drools规则引擎开发实现的具体步骤如下:
三、drools快速入门
业务场景描述
用户消费的金额对应赠送的积分规则情况如下:
//消费100元以下 不加分
//消费100元-500元 加100分
//消费500元-1000元 加500分
//消费1000元以上 加1000分
四、开发实现
第一步:创建maven项目droolsSpring,在创建好的项目pom.xml文件中添加drools依赖包
第二步:根据drools要求在maven项目目录下创建resources/META-INF/kmodule.xml
需要有一个配置文件告诉代码规则文件drl在哪里,在drools中这个文件就是kmodule.xml
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule"><!--name:指定kbase的名称,可以任意,但是必须唯一packages:指定规则文件的目录,需要根据实际情况填写,否则无法加载到规则文件default:指定当前kbase是否为默认--><kbase name="SimpleRuleKBase" packages="rules"><!--name:指定ksession的名称,可以任意,但是必须唯一default:指定当前ksession是否为默认--><ksession name="simpleRuleKSession"/></kbase>
</kmodule>
注意:配置文件中的名称和位置都是固定写法,不能更改
Kmodule中可以包含一个到多个kbase,分别对应drl的规则文件。
kbase需要一个唯一的name,可以取任意字符串。
packages为drl文件所在resource目录下的路径。注意分区drl文件中的package与此处的package不一定相同。多个包用逗号分隔,默认情况下会扫描resources目录下的所有(包含子目录)规则文件。
kbase的default属性,标示当前KieBase是不是默认的,如果是默认的则不用名称就可以直接查找到该KieBase,但每个module最多只能有一个默认的KieBase。
kbase下面可以有一个或多个ksession,ksession的name属性必须设置,且必须唯一。
第三步:创建订单实体类Order
package com.hx.rules.entity;import lombok.Data;@Data
public class Order {/*** 订单金额*/private int amount;/*** 积分*/private int score;@Overridepublic String toString() {return "Order{" +"amount=" + amount +", score=" + score +'}';}
}
第四步:创建规则文件resources/rules/score-rules.drl,规则文件的内容如下:
package rules;import com.hx.rules.entity.Order;//100元以下不加分
rule "score_1" //名称需唯一
when
$order:Order(amount < 100);
then
$order.setScore(0);
System.out.println("触发规则,100元以下不加分");
end//100元-500元 加100分
rule "score_2"
when
$order:Order(100 < amount && amount< 500)
then
$order.setScore(100);
System.out.println("触发规则,100元-500元 加100分");
end
//500元-1000元 加500分
rule "score_3"
when
$order:Order(500 < amount && amount < 1000)
then
$order.setScore(500);
System.out.println("触发规则,500元-1000元 加500分");
end
//1000元以上 加1000分
rule "score_4"
when
$order:Order(1000 < amount)
then
$order.setScore(1000);
System.out.println("触发规则,500元-1000元 加500分");
end
第五步:编写测试类TestDrools。
情况一:module文件中kbase指定特定名称,并且default设置为true,测试类的代码如下:
package com.hx.rules;import com.hx.rules.entity.Order;
import org.junit.Test;
import org.kie.api.KieBase;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;public class TestDrools {@Testpublic void test() {//第一步 获取KieServicesKieServices kieServices = KieServices.Factory.get();//第二步获取kieContainerKieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();//第三步获取kieSessionKieSession simpleRuleKSession = kieClasspathContainer.newKieSession();//新建事实对象Order order = new Order();order.setAmount(235);//第四步 插入事实对象到session中simpleRuleKSession.insert(order);//第五步 执行规则引擎simpleRuleKSession.fireAllRules();//第六步 关闭规则引擎simpleRuleKSession.dispose();System.out.println("规则执行完成,关闭规则");}
}
注意:
KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer(); //第三步获取kieSession KieSession simpleRuleKSession = kieClasspathContainer.newKieSession();
两端代码中的container和kiesession无线指定name也能查找到KieBase
情况二:module文件中kbase指定特定名称,default未设置或者设置为false,测试类的代码如下:
package com.hx.rules;import com.hx.rules.entity.Order;
import org.junit.Test;
import org.kie.api.KieBase;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;public class TestDrools {@Testpublic void test() {//第一步 获取KieServicesKieServices kieServices = KieServices.Factory.get();//第二步获取kieContainerKieContainer kieClasspathContainer = kieServices.getKieClasspathContainer("SimpleRuleKBase");//第三步获取kieSessionKieSession simpleRuleKSession = kieClasspathContainer.newKieSession("simpleRuleKSession");//新建事实对象Order order = new Order();order.setAmount(235);//第四步 插入事实对象到session中simpleRuleKSession.insert(order);//第五步 执行规则引擎simpleRuleKSession.fireAllRules();//第六步 关闭规则引擎simpleRuleKSession.dispose();System.out.println("规则执行完成,关闭规则");}
}
测试代码中按照注解描述的步骤逐一编写,执行代码得出如下结果:
看到对应规则输出表示案例测试成功
Drools规则引擎快速入门(二)_的博客-CSDN博客
Drools规则引擎快速入门(一)相关推荐
- Drools规则引擎之入门案例(一)
1.问题引出 一个在线申请信用卡的业务场景,用户需要录入个人信息,通过上图可以看到,用户录入的个人信息包括姓名.性别.年龄.学历.电话.所在公司.职位.月收入.是否有房.是否有车.是否有信用卡等.录入 ...
- 【Drools规则引擎】基础入门案例五(Kie-Server+WorkBench)
[Drools规则引擎]基础入门案例五(Kie-Server+WorkBench) 介绍 搭建WorkBench 搭建Kie-Server 使用WorkBench 访问登入 客户端测试 介绍 java ...
- drools规则引擎的基本使用和原理介绍
理论基石 借用:<drools规则引擎技术指南>来说, drools是: 开源项目,规则引擎技术,规则语法形成的规则文件,可以存在数据库等,通过drools包提供的接口,调用生成对应的结果 ...
- 详解:Drools规则引擎探究
引入 ▐ 问题引入 天猫奢品业务方为了吸引更多的新客,和提高会员的活跃度,做了一期活动,通过购买天猫奢品频道内的任意商品就赠送特殊积分,积分可以直接兑换限量的奢品商品.假如业务方给的规则如下: 主刃同 ...
- 使用 Drools 规则引擎实现业务逻辑,可调试drl文件
http://www.srcsky.com/tech/arts/389.html 代码下载http://download.csdn.net/detail/zhy011525/2462313 使用 Dr ...
- SpringBoot整合Drools规则引擎动态生成业务规则
最近的项目中,使用的是flowable工作流来处理业务流程,但是在业务规则的配置中,是在代码中直接固定写死的,领导说这样不好,需要规则可以动态变化,可以通过页面去动态配置改变,所以就花了几天时间去研究 ...
- Drools规则引擎之常用语法
一.基础api 在 Drools 当中,规则的编译与运行要通过Drools 提供的各种API 来实现,这些API 总体来讲可以分为三类:规则编译.规则收集和规则的执行.完成这些工作的API 主要有Kn ...
- 使用 Drools 规则引擎实现业务逻辑
要求施加在当今软件产品上的大多数复杂性是行为和功能方面的,从而导致组件实现具有复杂的业务逻辑.实现 J2EE 或 J2SE 应用程序中业务逻辑最常见的方法是编写 Java 代码来实现需求文档的规则和逻 ...
- Drools规则引擎平台如何进行架构
在<Drools7 规则引擎视频教程>的交流群中,有同学提出这样的问题:如果不想使用Drools官方提供的Workbench和KIE-Server进行规则的管理,而自行进行相应系统研发,该 ...
- drools规则引擎可视化
参考:drools规则引擎可视化 Drools是一款基于Java的优秀的规则引擎,将复杂多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得修改规则不需要改动代码重启服务就能生效. D ...
最新文章
- 《2019中国硬科技发展白皮书》发布,中美硬科技创新指数PK
- html/css 的基础知识
- 每天一道LeetCode-----判断二叉树左右两边是否成镜像关系
- ubuntu nginx php7,ubuntu 16 安装php7+nginx
- gcc/g++ 链接库的编译与链接
- 您一直在寻找5+个简单的一线工具来提升Python可视化效果
- 获取iOS设备当前ip地址
- 中查询一个文件夹下文件数量_如何在 Bash 中使用循环 | Linux 中国
- 【越南风景梯田Win7主题】
- 麻雀虽小五脏俱全--一个小项目的总结
- 基于华为java编程规范的checkstyle.xml以及格式化模版,注释模版
- 【Trailhead题目解析】Prepare your salesforce org for users - 2Update the Exchange Rate with ACM
- pygame实现 飞机大战-第三版-仿写版
- 阿里云大数据组件的基本介绍
- 十大顶级骨传导蓝牙耳机,推荐五款顶流的骨传导耳机
- 煤矿用计算机,计算机技术在煤矿安全生产中应用
- 微信群管理之全网黑名单的实现
- 国密算法 SM2 SM3 SM4 及密钥生成
- 记openssh升级,telnet安装(环境CentOS 7.9。 晗旧版本的不同补充)
- 最新 docker 日常总结-实用宝典-先收藏