最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成drools的實(shí)現(xiàn)示例

 更新時(shí)間:2022年05月26日 11:13:08   作者:huan_1993  
本文主要介紹了SpringBoot集成drools的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1、背景

在之前的文章中,我們學(xué)習(xí)了drools的一些基本語(yǔ)法,在這篇文章中,我們實(shí)現(xiàn)在SpringBoot中集成drools。

2、需求

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

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

3、實(shí)現(xiàn)

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 編寫(xiě)drools配置類

@Configuration
public class DroolsConfig {

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

3.3 編寫(xiě)Person對(duì)象

此處可以簡(jiǎn)單的理解為drools中的Fact對(duì)象。插入到drools中的工作內(nèi)存后就是Fact對(duì)象。

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

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

3.4 編寫(xiě)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

上方編寫(xiě)了2個(gè)規(guī)則,都是根據(jù)age來(lái)進(jìn)行判斷的,從而計(jì)算出用戶是否可以玩游戲canPlayGame。

3.5 編寫(xiě)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 編寫(xiě)Controller觸發(fā)規(guī)則

@RestController
public class PersonController {

? ? private final KieContainer kieContainer;

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

? ? /**
? ? ?* 調(diào)用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 測(cè)試

3.7.1 用戶的年齡>=18歲

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

可以看出drools中計(jì)算出來(lái)的canPlayGame值為`true

3.7.2 用戶的年齡<18歲

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

可以看出drools中計(jì)算出來(lái)的canPlayGame值為false

4、完整代碼

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

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

相關(guān)文章

  • JVM性能調(diào)優(yōu)實(shí)現(xiàn)原理及配置

    JVM性能調(diào)優(yōu)實(shí)現(xiàn)原理及配置

    這篇文章主要介紹了JVM性能調(diào)優(yōu)實(shí)現(xiàn)原理及配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • java反射_改變private中的變量及方法的簡(jiǎn)單實(shí)例

    java反射_改變private中的變量及方法的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇java反射_改變private中的變量及方法的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • Hadoop源碼分析五hdfs架構(gòu)原理剖析

    Hadoop源碼分析五hdfs架構(gòu)原理剖析

    本篇是Hadoop源碼分析系列文章第五篇,主要介紹Hadoop的hdfs架構(gòu)原理剖析,后續(xù)本系列文章會(huì)持續(xù)更新,有需要的朋友可以借鑒參考下
    2021-09-09
  • Java實(shí)現(xiàn)登錄和注冊(cè)案例

    Java實(shí)現(xiàn)登錄和注冊(cè)案例

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)登錄和注冊(cè)案例,把用戶信息存進(jìn)集合,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Springboot使用POI進(jìn)行excel文件的導(dǎo)出與下載方式

    Springboot使用POI進(jìn)行excel文件的導(dǎo)出與下載方式

    這篇文章主要介紹了Springboot使用POI進(jìn)行excel文件的導(dǎo)出與下載方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java身份證合法性校驗(yàn)并提取身份證有效信息

    java身份證合法性校驗(yàn)并提取身份證有效信息

    這篇文章主要為大家詳細(xì)介紹了java身份證合法性校驗(yàn),并獲取并根據(jù)身份證號(hào)提取身份證相關(guān)信息,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • springboot應(yīng)用中使用過(guò)濾器的過(guò)程詳解

    springboot應(yīng)用中使用過(guò)濾器的過(guò)程詳解

    過(guò)濾器通常用于實(shí)現(xiàn)跨切面的功能,例如身份驗(yàn)證、日志記錄、請(qǐng)求和響應(yīng)的修改、性能監(jiān)控等,這篇文章主要介紹了springboot應(yīng)用中使用過(guò)濾器,需要的朋友可以參考下
    2023-06-06
  • Java調(diào)用python的方法(jython)

    Java調(diào)用python的方法(jython)

    這篇文章主要介紹了Java調(diào)用python的方法(jython),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Java中自動(dòng)生成構(gòu)造方法詳解

    Java中自動(dòng)生成構(gòu)造方法詳解

    這篇文章主要介紹了Java中自動(dòng)生成構(gòu)造方法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java Management Extensions管理擴(kuò)展原理解析

    Java Management Extensions管理擴(kuò)展原理解析

    這篇文章主要介紹了Java Management Extensions管理擴(kuò)展原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04

最新評(píng)論

榆林市| 德钦县| 三明市| 塘沽区| 土默特右旗| 衡水市| 平谷区| 安陆市| 屏东市| 揭西县| 海盐县| 旺苍县| 安阳市| 比如县| 博白县| 丰原市| 杂多县| 伊通| 高雄县| 天水市| 常德市| 南江县| 海南省| 河东区| 罗山县| 福鼎市| 奈曼旗| 裕民县| 玉树县| 灯塔市| 鹤壁市| 方正县| 建昌县| 隆昌县| 抚顺市| 米泉市| 安丘市| 融水| 环江| 嘉义市| 伽师县|