欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot集成drools的實現示例

 更新時間:2022年05月26日 11:13:08   作者:huan_1993  
本文主要介紹了SpringBoot集成drools的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1、背景

在之前的文章中,我們學習了drools的一些基本語法,在這篇文章中,我們實現在SpringBoot中集成drools。

2、需求

我們需要在drools中判斷用戶是否可以玩游戲。

  • 規(guī)則一:如果用戶的年齡age>=18,則可以玩游戲。
  • 規(guī)則二:如果用戶的年齡age<18,則不可以玩游戲。

3、實現

3.1 引入jar包

<dependencyManagement>
? ? <dependencies>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.drools</groupId>
? ? ? ? ? ? <artifactId>drools-bom</artifactId>
? ? ? ? ? ? <type>pom</type>
? ? ? ? ? ? <version>7.69.0.Final</version>
? ? ? ? ? ? <scope>import</scope>
? ? ? ? </dependency>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? <artifactId>spring-boot-dependencies</artifactId>
? ? ? ? ? ? <version>2.6.7</version>
? ? ? ? ? ? <scope>import</scope>
? ? ? ? ? ? <type>pom</type>
? ? ? ? </dependency>
? ? </dependencies>
</dependencyManagement>

<dependencies>
? ? <dependency>
? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? <artifactId>spring-boot-starter-web</artifactId>
? ? </dependency>
? ? <dependency>
? ? ? ? <groupId>org.drools</groupId>
? ? ? ? <artifactId>drools-compiler</artifactId>
? ? </dependency>
? ? <dependency>
? ? ? ? <groupId>org.drools</groupId>
? ? ? ? <artifactId>drools-mvel</artifactId>
? ? </dependency>
? ? <dependency>
? ? ? ? <groupId>org.projectlombok</groupId>
? ? ? ? <artifactId>lombok</artifactId>
? ? ? ? <version>1.18.22</version>
? ? </dependency>
</dependencies>

此處引入drools和springboot的jar包。

3.2 編寫drools配置類

@Configuration
public class DroolsConfig {

? ? @Bean
? ? public KieContainer kieContainer() {
? ? ? ? KieServices kieServices = KieServices.get();
? ? ? ? return kieServices.getKieClasspathContainer();
? ? }
}

3.3 編寫Person對象

此處可以簡單的理解為drools中的Fact對象。插入到drools中的工作內存后就是Fact對象。

@Data
@AllArgsConstructor
public class Person {
    private String name;
    private Integer age;
    // 是否可以玩游戲,此字段的值,由 drools 引擎計算得出
    private Boolean canPlayGame;
}

canPlayGame:此字段的值是由drools引擎計算得出的。

3.4 編寫drl文件

package rules

import com.huan.drools.fact.Person

// 用戶可以玩游戲
rule "rule_person_can_play_game"
? ? when
? ? ? ? $person: Person( age >= 18)
? ? then
? ? ? ? $person.setCanPlayGame(true);
? ? ? ? System.out.println("觸發(fā)規(guī)則:" + drools.getRule().getName());
end

// 用戶不可以玩游戲
rule "rule_person_Can't_play_game"
? ? when
? ? ? ? $person: Person( age < 18)
? ? then
? ? ? ? $person.setCanPlayGame(false);
? ? ? ? System.out.println("觸發(fā)規(guī)則:" + drools.getRule().getName());
end

上方編寫了2個規(guī)則,都是根據age來進行判斷的,從而計算出用戶是否可以玩游戲canPlayGame。

3.5 編寫kmodule.xml文件

kmodule.xml的路徑位于 src/main/resources/META-INF目錄下。

<kmodule xmlns="http://www.drools.org/xsd/kmodule">
    <kbase name="kabse" packages="rules" default="false">
        <ksession name="ksession" default="false" type="stateful">
            <consoleLogger/>
            <listeners>
                <ruleRuntimeEventListener type="org.kie.api.event.rule.DebugRuleRuntimeEventListener"/>
                <processEventListener type="org.drools.core.event.DebugProcessEventListener"/>
                <agendaEventListener type="org.drools.core.event.DebugAgendaEventListener"/>
            </listeners>
        </ksession>
    </kbase>
</kmodule>

3.6 編寫Controller觸發(fā)規(guī)則

@RestController
public class PersonController {

? ? private final KieContainer kieContainer;

? ? public PersonController(KieContainer kieContainer) {
? ? ? ? this.kieContainer = kieContainer;
? ? }

? ? /**
? ? ?* 調用drools rule判斷用戶是否可以玩游戲
? ? ?*/
? ? @GetMapping("canPlayGame")
? ? public Person canPlayGame(Person person) {
? ? ? ? KieSession kieSession = kieContainer.newKieSession("ksession");
? ? ? ? try {
? ? ? ? ? ? kieSession.insert(person);
? ? ? ? ? ? kieSession.fireAllRules();
? ? ? ? } finally {
? ? ? ? ? ? kieSession.dispose();
? ? ? ? }
? ? ? ? return person;
? ? }
}

3.7 測試

3.7.1 用戶的年齡>=18歲

? curl http://localhost:8081/canPlayGame\?name\=huan\&age\=20
{"name":"huan","age":20,"canPlayGame":true}  

可以看出drools中計算出來的canPlayGame值為`true

3.7.2 用戶的年齡<18歲

? curl http://localhost:8081/canPlayGame\?name\=huan\&age\=16
{"name":"huan","age":20,"canPlayGame":false}  

可以看出drools中計算出來的canPlayGame值為false

4、完整代碼

https://gitee.com/huan1993/spring-cloud-parent/tree/master/drools/drools-integrated-springboot

到此這篇關于SpringBoot集成drools的實現示例的文章就介紹到這了,更多相關SpringBoot集成drools內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 老程序員教你一天時間完成Java迷宮小游戲

    老程序員教你一天時間完成Java迷宮小游戲

    最近經常在機房看同學在玩一個走迷宮的游戲,比較有趣,自己也用java寫一個實現隨機生成迷宮的算法,其實就是一個圖的深度優(yōu)先遍歷算法.
    2021-08-08
  • Java解析XML的四種方式

    Java解析XML的四種方式

    本文詳細講解了Java解析XML的四種方式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 一步步帶你入門Java中File類

    一步步帶你入門Java中File類

    java.io.File類是文件和目錄路徑名的抽象表示形式,主要用于文件和目錄的創(chuàng)建、查找和刪除等操作,下面這篇文章主要給大家介紹了關于入門Java中File類的相關資料,需要的朋友可以參考下
    2022-03-03
  • spring boot中interceptor攔截器未生效的解決

    spring boot中interceptor攔截器未生效的解決

    這篇文章主要介紹了spring boot中interceptor攔截器未生效的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • springboot讀取文件,打成jar包后訪問不到的解決

    springboot讀取文件,打成jar包后訪問不到的解決

    這篇文章主要介紹了springboot讀取文件,打成jar包后訪問不到的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java向List集合中批量添加元素的實現方法

    Java向List集合中批量添加元素的實現方法

    這篇文章主要介紹了Java向List集合中批量添加元素的實現方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • idea中如何創(chuàng)建scala項目

    idea中如何創(chuàng)建scala項目

    idea中創(chuàng)建scala項目有三種方式1.通過maven;2.通過idea;3.通過sbt的方式;本文就每種方法通過圖文并茂的形式給大家詳細介紹,需要的朋友參考下吧
    2021-07-07
  • 1秒鐘實現Springboot?替換/寫入?word文檔里面的文字、圖片功能

    1秒鐘實現Springboot?替換/寫入?word文檔里面的文字、圖片功能

    這篇文章主要介紹了Springboot?替換/寫入?word文檔里面的文字、圖片,1秒鐘實現,本文結合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • OpenCV實現普通閾值

    OpenCV實現普通閾值

    這篇文章主要為大家詳細介紹了OpenCV實現普通閾值,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • FreeMarker如何調用Java靜態(tài)方法及靜態(tài)變量方法

    FreeMarker如何調用Java靜態(tài)方法及靜態(tài)變量方法

    這篇文章主要介紹了FreeMarker如何調用Java靜態(tài)方法及靜態(tài)變量方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論