天天看點

Drools7 Hello Wrold 入門詳細步驟--系列01課

一、什麼叫規則引擎?

規則---》寫在文檔上

引擎---》在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

繼續閱讀