Drools7 Hello Wrold 入门详细步骤--系列01课

一、什么叫规则引擎?
规则---》写在文档上
引擎---》在java代码上,引用这个文档上的规则

二、drools规则引擎有什么用?
简单来说就是将多变的规则,从业务代码中剥离出来
(当规则变了之后,不用修改代码,而是修改一份文本,这样就可以不用编译,打包,上线,这些过程就省略了,省了很多时间呀!!也省了很多重复步骤!!)

三、这个规则引擎的应用场景有哪一些?
风控系统(规则很多,而且容易变动,做互联网金融的同志深有体会)
活动营销系统(活动很多种,集积分送礼品,抽奖送礼品,竞争成功送礼品等等不同形式,这里可以变成不同的规则)

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

积分系统


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

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

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

1、添加maven依赖包

    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-core</artifactId>
      <version>7.7.0.Final</version>
    </dependency>
    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-compiler</artifactId>
      <version>7.7.0.Final</version>
    </dependency>
    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-templates</artifactId>
      <version>7.7.0.Final</version>
    </dependency>

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

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


3、

 @Test
    public void testDrool7Api(){
        KieServices kieServices = KieServices.Factory.get(); // 通过这个静态方法去获取一个实例
        KieContainer kieContainer = kieServices.getKieClasspathContainer();// 默认去读取配置文件
        KieSession kieSession = kieContainer.newKieSession("all-rules");// 根据这个名词去获取kieSession

        Person p1 = new Person();
        p1.setAge(30);
        Car c1 = new Car();
        c1.setPerson(p1);

        Person p2 = new Person();
        p1.setAge(70);
        Car c2 = new Car();
        c2.setPerson(p2);

        kieSession.insert(c1); // 将c1实例放入到session中,
        kieSession.insert(c2); //

        int count = kieSession.fireAllRules();// 开始执行规则,并获取执行了多少条规则
        kieSession.dispose();// 关闭session
        System.out.println("Fire " + count + " rule(s)!");
        System.out.println("The discount of c1 is " + c1.getDiscount() + "%");
        System.out.println("The discount of c2 is " + c2.getDiscount() + "%");
    }

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、结果:






评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值