91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Drools規則引擎的簡單使用

發布時間:2021-09-10 11:02:56 來源:億速云 閱讀:171 作者:chen 欄目:大數據

本篇內容介紹了“Drools規則引擎的簡單使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!


簡單使用

一個給不同商品設置不同折扣的例子
pom.xml

<dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-compiler</artifactId>
      <version>7.23.0.Final</version>
</dependency>

kmodule.xml 文件用于配置規則腳本,可以有多個kbase
文件放在項目resources/META-INF目錄下可以自動加載

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

Product Bean實體

//lombok注解
@Data
public class Product {
    public static final String DIAMOND = "DIAMOND";

    public static final String GOLD = "GOLD";

    private String type;

    private int discount;
}

resources/rules/Rules.drl 規則腳本

package rules

import drools.Product

//當商品類型是DIAMOND時,打折為15%
rule Offer4Diamond
    when
        productObject:Product(type == Product.DIAMOND)
    then
        productObject.setDiscount(15);
    end

//當商品類型是GOLD時,打折為25%
rule Offer4Gold
    when
        productObject: Product(type == Product.GOLD)
    then
        productObject.setDiscount(25);
    end

junit Test

    @Test
    public void droolsTest() {
        KieServices ks = KieServices.Factory.get();
        KieContainer kieContainer = ks.getKieClasspathContainer();
        KieSession kSession = kieContainer.newKieSession("ksession-rule");

        Product product = new Product();
        product.setType(Product.GOLD);

        kSession.insert(product);
        int count = kSession.fireAllRules();
        System.out.println("命中了" + count + "條規則");
        System.out.println("商品" + product.getType() + "的商品折扣為" + product.getDiscount() + "%");
    }

運行結果

命中了1條規則
商品GOLD的商品折扣為25%

解釋一下

kmodule.xml

  • 該文件用來配置規則表,可以包含多個kbase,每個kbase都有name屬性,不能重復

  • kbase可以包含多個ksession, packages屬性是src/main/resources目錄下文件夾的包路徑,可以定義多個包,逗號分隔,packages目錄下的所有規則文件都會被加載,除了子目錄

  • ksession 的name不能重復,Java代碼中KieSession設置的name就是該配置的name

droolsTest

  • KieServices 
    該接口提供了很多方法,可以通過這些方法訪問KIE關于構建和運行的相關對象,比如說可以獲取KieContainer,利用KieContainer來訪問KBase和KSession等信息;可以獲取KieRepository對象,利用KieRepository來管理KieModule等。 
    KieServices就是一個中心,通過它來獲取的各種對象來完成規則構建、管理和執行等操作。

  • KieContainer
    KieContainer可以理解為是一個KieBase的容器。

  • KieBase 
    KieBase可以理解為是一個知識倉庫,包含了若干的規則、流程、方法等,在Drools中主要就是規則和方法,KieBase本身并不包含運行時的數據之類的,如果需要執行規則KieBase中的規則的話,就需要根據KieBase創建KieSession。

  • KieSession
    KieSession就是一個跟Drools引擎打交道的會話,其基于KieBase創建,它會包含運行時數據,包含“事實 Fact”,并對運行時數據事實進行規則運算。我們通過KieContainer創建KieSession是一種較為方便的做法,其實他本質上是從KieBase中創建出來

動態規則

實現動態規則有這幾種思路

     1. 使用Workbench,通過Web管理頁面動態生成配置規則

     2. 將規則以字符串的形式存入數據庫,需要自己開發一套規則管理系統

使用Wrokbench

1.docker部署workbench

workbench
docker run -p 8080:8080 -p 8001:8001 -d --name drools-wb jboss/drools-workbench-showcase:7.5.0.Final 
kie-server
docker run -p 8180:8180 -d --name kie-server --link drools-wb:kie_wb jboss/kie-server-showcase:7.5.0.Final

訪問http://ip地址:8080/drools-wb 
默認賬號/密碼 admin/admin

Drools規則引擎的簡單使用

2.創建項目

Drools規則引擎的簡單使用

Drools規則引擎的簡單使用

3.創建Object

Drools規則引擎的簡單使用

Drools規則引擎的簡單使用

4.創建DRL文件

Drools規則引擎的簡單使用

Drools規則引擎的簡單使用

5.部署

Drools規則引擎的簡單使用

6.使用部署的規則文件

遠程規則Maven倉庫地址獲取

Drools規則引擎的簡單使用

Drools規則引擎的簡單使用


本地Maven倉庫settings.xml配置,這里只摘錄了需要添加的3處,需要對應去添加

<server>
      <username>admin</username>
      <password>admin</password>
      <id>guvnor-m2-repo</id>
</server>

<profile>
  <id>guvnor-m2-repo</id> 
  <repositories>
    <repository>
      <id>guvnor-m2-repo</id>
      <name>Guvnor M2 Repo</name> 
      <url>http://10.211.55.7:8080/drools-wb/maven2/</url>
      <layout>default</layout> 
      <releases>
        <enabled>true</enabled>
        <updatePolicy>always</updatePolicy> 
      </releases>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>always</updatePolicy> <!--更新策略,常常 --> 
      </snapshots>
    </repository> 
  </repositories>
  <activation> 
    <activeByDefault>true</activeByDefault>
  </activation>
</profile>

<activeProfiles>
    <activeProfile>guvnor-m2-repo</activeProfile>
</activeProfiles>

創建一個標準的SpringBoot工程

Product實體,包路徑要跟規則文件中的一致

@Data
public class Product {
    private String type;

    private int discount;
}

DroolsController.java

@RestController
@RequestMapping("/api/")
@Slf4j
public class DroolsController {

    @PostMapping("getdiscount")
    public Product getDiscount(Product product) throws IOException {
        KieServices ks = KieServices.Factory.get();
        //RELEASE 代表使用jar包的最新正式版
        ReleaseIdImpl releaseId = new ReleaseIdImpl("com.myteam", "test", "RELEASE");
        KieContainer kieContainer = ks.newKieContainer(releaseId);
        //自動掃描Maven倉庫,有新版本會自動下載
        KieScanner kieScanner = ks.newKieScanner(kieContainer);
        kieScanner.start(3000);
        KieSession kieSession = kieContainer.newKieSession();
        kieSession.insert(product);
        int count = kieSession.fireAllRules();

        log.info("共執行了{}條規則", count);
        log.info("商品{}的折扣為{}%", product.getType(), 
        product.getDiscount());
        return product;
    }
}

PostMan訪問接口

Drools規則引擎的簡單使用
與DRL規則文件中配置的一致

7.動態規則

修改ppdrl.drl規則表,修改GOLD的打折為50%,保存規則,將項目版本提高一個版本,并build&deploy項目

Drools規則引擎的簡單使用

Drools規則引擎的簡單使用

Drools規則引擎的簡單使用
再次訪問接口,GOLD的折扣已經變為50%,其中沒有重啟服務

Drools規則引擎的簡單使用

“Drools規則引擎的簡單使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

民和| 尼木县| 吴江市| 鸡东县| 宜春市| 邹平县| 莎车县| 正镶白旗| 伊金霍洛旗| 大丰市| 德州市| 西乌珠穆沁旗| 宝应县| 高碑店市| 沂源县| 边坝县| 平陆县| 定襄县| 陕西省| 余江县| 曲沃县| 宁城县| 浦北县| 腾冲县| 南充市| 双牌县| 榆树市| 五莲县| 庆云县| 高安市| 库尔勒市| 皮山县| 甘肃省| 蒙城县| 天峨县| 罗甸县| 肥城市| 塔河县| 明溪县| 靖边县| 日照市|