目录

一、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规则引擎快速入门(一)相关推荐

  1. Drools规则引擎之入门案例(一)

    1.问题引出 一个在线申请信用卡的业务场景,用户需要录入个人信息,通过上图可以看到,用户录入的个人信息包括姓名.性别.年龄.学历.电话.所在公司.职位.月收入.是否有房.是否有车.是否有信用卡等.录入 ...

  2. 【Drools规则引擎】基础入门案例五(Kie-Server+WorkBench)

    [Drools规则引擎]基础入门案例五(Kie-Server+WorkBench) 介绍 搭建WorkBench 搭建Kie-Server 使用WorkBench 访问登入 客户端测试 介绍 java ...

  3. drools规则引擎的基本使用和原理介绍

    理论基石 借用:<drools规则引擎技术指南>来说, drools是: 开源项目,规则引擎技术,规则语法形成的规则文件,可以存在数据库等,通过drools包提供的接口,调用生成对应的结果 ...

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

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

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

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

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

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

  7. Drools规则引擎之常用语法

    一.基础api 在 Drools 当中,规则的编译与运行要通过Drools 提供的各种API 来实现,这些API 总体来讲可以分为三类:规则编译.规则收集和规则的执行.完成这些工作的API 主要有Kn ...

  8. 使用 Drools 规则引擎实现业务逻辑

    要求施加在当今软件产品上的大多数复杂性是行为和功能方面的,从而导致组件实现具有复杂的业务逻辑.实现 J2EE 或 J2SE 应用程序中业务逻辑最常见的方法是编写 Java 代码来实现需求文档的规则和逻 ...

  9. Drools规则引擎平台如何进行架构

    在<Drools7 规则引擎视频教程>的交流群中,有同学提出这样的问题:如果不想使用Drools官方提供的Workbench和KIE-Server进行规则的管理,而自行进行相应系统研发,该 ...

  10. drools规则引擎可视化

    参考:drools规则引擎可视化 Drools是一款基于Java的优秀的规则引擎,将复杂多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得修改规则不需要改动代码重启服务就能生效. D ...

最新文章

  1. 《2019中国硬科技发展白皮书》发布,中美硬科技创新指数PK
  2. html/css 的基础知识
  3. 每天一道LeetCode-----判断二叉树左右两边是否成镜像关系
  4. ubuntu nginx php7,ubuntu 16 安装php7+nginx
  5. gcc/g++ 链接库的编译与链接
  6. 您一直在寻找5+个简单的一线工具来提升Python可视化效果
  7. 获取iOS设备当前ip地址
  8. 中查询一个文件夹下文件数量_如何在 Bash 中使用循环 | Linux 中国
  9. 【越南风景梯田Win7主题】
  10. 麻雀虽小五脏俱全--一个小项目的总结
  11. 基于华为java编程规范的checkstyle.xml以及格式化模版,注释模版
  12. 【Trailhead题目解析】Prepare your salesforce org for users - 2Update the Exchange Rate with ACM
  13. pygame实现 飞机大战-第三版-仿写版
  14. 阿里云大数据组件的基本介绍
  15. 十大顶级骨传导蓝牙耳机,推荐五款顶流的骨传导耳机
  16. 煤矿用计算机,计算机技术在煤矿安全生产中应用
  17. 微信群管理之全网黑名单的实现
  18. 国密算法 SM2 SM3 SM4 及密钥生成
  19. 记openssh升级,telnet安装(环境CentOS 7.9。 晗旧版本的不同补充)
  20. 最新 docker 日常总结-实用宝典-先收藏

热门文章

  1. php复姓怎么排序,按姓氏笔画排名怎么排列了
  2. quarkus-contexts和DI介绍(原理)
  3. 小程序开发工具命令行启动配置
  4. 工资短信生成器如何使用
  5. Excel 数据处理基础
  6. win10虚拟打印服务器,win10系统安装虚拟打印机的图文方法
  7. 弘辽科技:天猫国际预测2022六大进口消费趋势
  8. CAD:计算三角形的外接圆圆心
  9. Java List集合去重的多种方法
  10. 【蓝桥杯】大臣的旅费(C++) (DSF+树的最大直径)