一、什么叫规则引擎?
规则---》写在文档上
引擎---》在java代码上,引用这个文档上的规则
二、drools规则引擎有什么用?
简单来说就是将多变的规则,从业务代码中剥离出来
(当规则变了之后,不用修改代码,而是修改一份文本,这样就可以不用编译,打包,上线,这些过程就省略了,省了很多时间呀!!也省了很多重复步骤!!)
三、这个规则引擎的应用场景有哪一些?
风控系统(规则很多,而且容易变动,做互联网金融的同志深有体会)
活动营销系统(活动很多种,集积分送礼品,抽奖送礼品,竞争成功送礼品等等不同形式,这里可以变成不同的规则)

商品折扣系统(同一个商品,不同的用户,每个用户有不同的折扣优惠)

积分系统

个人总结:
有人会问,如果把规则,写在java代码上,同样也能实现功能呀,为什么还要单独弄一份文档出来,另外去读取它,这样操作呢?分离这些规则,很麻烦呀。当然,任何事情都有双面性。在架构选型的时候,要充分认识到drools的使用和各种因素,才能决定是否在实际项目中使用它。总结一句话,规则多变,则可以选用。(功能可以简单地理解成 java中的策略模式,switch功能)
==================================================================
四、将drools规则融入到项目中。本文主要介绍drools7的从0开始,目前有一个简单的需求:

某汽车举行活动,年龄超过60,打8折,其他年龄打9折,请用drools7来实现。

(本文是用IDEA来做,用eclipse的同学,请先百度一下,drools ecplies的运行环境安装,按步骤安装完就可以了)

1、添加maven依赖包


  1. <dependency>
  2. <groupId>org.drools</groupId>
  3. <artifactId>drools-core</artifactId>
  4. <version>7.7.0.Final</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.drools</groupId>
  8. <artifactId>drools-compiler</artifactId>
  9. <version>7.7.0.Final</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.drools</groupId>
  13. <artifactId>drools-templates</artifactId>
  14. <version>7.7.0.Final</version>
  15. </dependency>

2、创建一个xml,注意一定要放在META-INF文件夹下,drools会自动解析它


  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <kmodule xmlns="http://www.drools.org/xsd/kmodule">
  3. <kbase name="rules">
  4. <ksession name="all-rules"/>
  5. </kbase>
  6. </kmodule>

3、


  1. @Test
  2. public void testDrool7Api(){
  3. KieServices kieServices = KieServices.Factory.get(); // 通过这个静态方法去获取一个实例
  4. KieContainer kieContainer = kieServices.getKieClasspathContainer();// 默认去读取配置文件
  5. KieSession kieSession = kieContainer.newKieSession("all-rules");// 根据这个名词去获取kieSession
  6. Person p1 = new Person();
  7. p1.setAge(30);
  8. Car c1 = new Car();
  9. c1.setPerson(p1);
  10. Person p2 = new Person();
  11. p1.setAge(70);
  12. Car c2 = new Car();
  13. c2.setPerson(p2);
  14. kieSession.insert(c1); // 将c1实例放入到session中,
  15. kieSession.insert(c2); //
  16. int count = kieSession.fireAllRules();// 开始执行规则,并获取执行了多少条规则
  17. kieSession.dispose();// 关闭session
  18. System.out.println("Fire " + count + " rule(s)!");
  19. System.out.println("The discount of c1 is " + c1.getDiscount() + "%");
  20. System.out.println("The discount of c2 is " + c2.getDiscount() + "%");
  21. }

4、注意路径

package com.rules
import com.drools.model.Car
import com.drools.model.Person rule "test-drool7-older than 60" when

$Car : Car( person.age > 60)

then

$Car.setDiscount(80);

System.out.println("test-drool7-older than 60"+$Car.getPerson().getAge());

end rule "test-drool7-other" when

$Car : Car( person.age<=60)

then

$Car.setDiscount(70);

System.out.println("test-drool7-other"+$Car.getPerson().getAge());

end

5、结果:

原文地址:https://blog.csdn.net/weixin_37662342/article/details/80773027

Drools7 Hello Wrold 入门详细步骤--系列01课的更多相关文章

  1. php从入门到放弃系列-01.php环境的搭建

    php从入门到放弃系列-01.php环境的搭建 一.为什么要学习php 1.php语言适用于中小型网站的快速开发: 2.并且有非常成熟的开源框架,例如yii,thinkphp等: 3.几乎全部的CMS ...

  2. OSG入门即osgEarth建立一个地球的详细步骤

    OSG入门即osgEarth建立一个地球的详细步骤 转:http://blog.csdn.net/xiaol_deng/article/details/9246291 最近在学习有关osg的知识,刚开 ...

  3. Git学习系列之Windows上安装Git详细步骤(图文详解)

    前言 最初,Git是用于Linux下的内核代码管理.因为其非常好用,目前,已经被成功移植到Mac和Windows操作系统下. 鉴于大部分使用者使用的是Windows操作系统,故,这里详细讲解Windo ...

  4. [.NET MVC4 入门系列01]Helloworld MVC 4 第一个MVC4程序

    [.NET MVC4 入门系列01]Helloworld MVC 4 第一个MVC4程序   一.练习项目: http://www.asp.net/mvc/tutorials/mvc-4/gettin ...

  5. Wireshark入门与进阶系列(二)

    摘自http://blog.csdn.net/howeverpf/article/details/40743705 Wireshark入门与进阶系列(二) “君子生非异也,善假于物也”---荀子 本文 ...

  6. Wireshark入门与进阶系列(一)

    摘自http://blog.csdn.net/howeverpf/article/details/40687049 Wireshark入门与进阶系列(一) “君子生非异也,善假于物也”---荀子 本文 ...

  7. MVC5 + EF6 入门完整教程(转载)--01

    MVC5 + EF6 入门完整教程   第0课 从0开始 ASP.NET MVC开发模式和传统的WebForm开发模式相比,增加了很多"约定". 直接讲这些 "约定&qu ...

  8. [转帖]龙芯服务器部署WEB服务的体验和详细步骤

    龙芯服务器部署WEB服务的体验和详细步骤 2019年01月02日 18:40:34 weixin_40065369 阅读数 1733   版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权 ...

  9. OPGL+GLFW+GLEW配置详细步骤

    转载自:https://blog.csdn.net/weixin_40921421/article/details/80211813 本文设计的工具包: 链接:https://pan.baidu.co ...

随机推荐

  1. GoCN每日新闻(2019-11-04)

    GoCN每日新闻(2019-11-04) GoCN每日新闻(2019-11-04)   1. Go中垃圾收集器是如何标记内存的 https://medium.com/a-journey-with-go ...

  2. 使用Lua脚本通过原子减防止超卖

    需求 双十二要搞一个一分钱门票抢购的活动. 分析 性能分析,抢购时会发生高并发,如果仅仅依靠Mysql数据库,有可能因为大量的请求频繁访问数据库造成服务器雪崩,所以考虑通过Redis减库存,最终的数据 ...

  3. Internet地址结构

    IP地址结构及分类寻址 IP地址 = <网络号> + <主机号>            ------------IPv4(32bit)点分四组表示法: 192.168.31.1 ...

  4. 转载:关于思科交换机、路由器如何关闭telnet 开启ssh服务

    等保测评要求: 必须关闭telnet服务,开启ssh服务 即用ssh方式登录网络设备,而不允许用telnet. 输入密码.en 再次输入密码.sh run 这些常规动作就不再赘述. 1.关闭telne ...

  5. 微信小程序怎么获取page/index/main后面的参数

    请求例子:page/index/main?id=123,如何获取123? mpvue框架在onLoad(options)函数里面获取options.id即可. 用的框架不同,onLoad的函数不同.原 ...

  6. MySQL索引原理(二)

    MySQL索引原理 1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中.索引是数据库中专门用于帮助用户快速查询数据的一种数据结构. ...

  7. windows如何删除服务

    有时候软件被安装成了服务,但是卸载后如何删除无效的服务,这时候就不是普通用户就能删除了,这属于操作系统管理级别了,需要使用管理命令了. 管理员权限打开cmd,执行如下: C:\Windows\syst ...

  8. Zookeeper:Unable to read additional data from client sessionid 0x00, likely client has closed socket

    异常信息: 2018-03-20 23:34:01,887 [myid:99] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerC ...

  9. HandlerMethodReturnValueHandler SpringMVC 参数解析 继承关系以及各解析器解析类型

    I HandlerMethodReturnValueHandler (org.springframework.web.method.support) AbstractMessageConverterM ...

  10. 查找算法(1)--Sequential search--顺序查找

    1. 顺序查找 (1)说明 顺序查找适合于存储结构为顺序存储或链接存储的线性表.     (2)基本思想 顺序查找也称为线形查找,属于无序查找算法.从数据结构线形表的一端开始,顺序扫描,依次将扫描到的 ...