广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot集成drools的实现示例
  • 446
分享到

SpringBoot集成drools的实现示例

2024-04-02 19:04:59 446人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录1、背景2、需求3、实现3.1 引入jar包3.2 编写drools配置类3.3 编写Person对象3.4 编写drl文件3.5 编写kmodule.xml文件3.6 编写Co

1、背景

在之前的文章中,我们学习了drools的一些基本语法,在这篇文章中,我们实现在SpringBoot中集成drools。

2、需求

我们需要在drools中判断用户是否可以玩游戏。

  • 规则一:如果用户的年龄age>=18,则可以玩游戏。
  • 规则二:如果用户的年龄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("触发规则:" + drools.getRule().getName());
end

// 用户不可以玩游戏
rule "rule_person_Can't_play_game"
    when
        $person: Person( age < 18)
    then
        $person.setCanPlayGame(false);
        System.out.println("触发规则:" + drools.getRule().getName());
end

上方编写了2个规则,都是根据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触发规则

@RestController
public class PersonController {

    private final KieContainer kieContainer;

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

    
    @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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot集成drools的实现示例

本文链接: https://www.lsjlt.com/news/149804.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot集成drools的实现示例
    目录1、背景2、需求3、实现3.1 引入jar包3.2 编写drools配置类3.3 编写Person对象3.4 编写drl文件3.5 编写kmodule.xml文件3.6 编写Co...
    99+
    2022-11-13
  • springboot集成camunda的实现示例
    目录1、说明2、配置实战3、生成数据库表说明1、说明 camunda使用Java开的工作流引擎。这里使用springboot 2.2.6.release + camunda 3.4...
    99+
    2022-11-12
  • SpringBoot集成GraphqlQuery实战示例
    目录概述场景模拟开发实战创建一个SpringBoot项目建立Java实体类编写Schema文件编写业务逻辑配置Graphql 端点测试安装插件查询小结概述 REST作为一种现代网络应...
    99+
    2022-11-13
  • Springboot WebFlux集成Spring Security实现JWT认证的示例
    目录1 简介 2 项目整合 2.1 JWT工具类 2.2 JWT的过滤器 2.3 Security的配置 2.4 获取JWT的Controller 3 总结 1 简介 在之前的文章...
    99+
    2022-11-12
  • SpringBoot Admin集成诊断利器Arthas示例实现
    目录前言SpringBoot AdminSBA 集成客户端配置在配置中心加入配置实现开关效果结束前言 Arthas 是 Alibaba开源的Java诊断工具,具有实时查看系统的运行状...
    99+
    2022-11-13
  • SpringBoot集成redis的示例分析
    这篇文章给大家分享的是有关SpringBoot集成redis的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。如何使用springBoot集成redis 定义REmote ...
    99+
    2022-10-18
  • SpringBoot集成redis的示例代码
    目录前言一、redis是什么二、集成redis步骤三、代码演示前言 redis想必小伙伴们即使没有用过,也是经常听到的,在工作中,redis用到的频率非常高,今天详细介绍一下Spr...
    99+
    2022-11-12
  • SpringBoot集成ElasticSearch的示例代码
    目录一、Elasticseach介绍1.简单介绍2.对比关系:3.详细说明:4.查出数据的解释 二、SpringBoot集成Elasticseach1.引入依赖2.添加配置...
    99+
    2022-11-13
  • SpringBoot集成MQTT示例详解
    目录引言MQTT特点Apache-Apollo下载配置与启动SpringBoot2的开发添加依赖自定义配置配置MQTT发布和订阅消息发布器发送消息入口类引言 特别提醒: 文...
    99+
    2022-11-13
  • Springboot集成ProtoBuf的实例
    目录Springboot集成ProtoBuf1、pom.xml引入相关依赖2、新建序列化工具类ProtoBufUtil.java3、新建实体类User.java4、使用方式Proto...
    99+
    2022-11-13
  • SpringBoot集成FastDFS依赖实现文件上传的示例
    目录前言1、引入依赖2、将Fdfs配置引入项目3、在application.yml当中配置Fdfs相关参数4、client封装工具类5、创建Conttoler测试类5.1 文件上传测...
    99+
    2022-11-12
  • SpringBoot集成支付宝沙箱支付的实现示例
    目录开发前准备1、密钥工具2、沙箱环境3、内网穿透工具代码集成1、Java SDK2、支付宝配置3、支付和回调接口4、前端Vue调用开发前准备 1、密钥工具 在线工具地址:https...
    99+
    2022-11-12
  • java集成开发SpringBoot生成接口文档示例实现
    目录为什么要用Swagger ?Swagger集成第一步: 引入依赖包第二步:修改配置文件第三步,配置API接口Unable to infer base urlFor input s...
    99+
    2022-11-12
  • SpringBoot生成License的实现示例
    前言 License指的是版权许可证,当我们开发完系统后,如果不想让用户一直白嫖使用,比如说按时间续费,License的作用就有了。 我们可以给系统指定License的有效期,控制系...
    99+
    2022-11-12
  • Java开发SpringBoot集成接口文档实现示例
    目录swagger vs smart-docSwagger的代码侵入性比较强原生swagger不支持接口的参数分组简单罗列一下smart-doc的优点SpringBoot集成 sma...
    99+
    2022-11-12
  • SpringBoot框架集成ElasticSearch实现过程示例详解
    目录依赖与SpringBoot集成配置类实体类测试例子RestHighLevelClient直接操作索引操作文档操作检索操作依赖 SpringBoot版本:2.4.2 <...
    99+
    2022-11-12
  • SpringBoot集成Auth0 JWT的示例代码
    目录前言session认证与Token认证session认证Token认证JWT简介JWT定义JWT的类库具体实现JWT配置JWT工具类测试接口前言 说说JWT,先说下互联网服务常见...
    99+
    2022-11-12
  • SpringBoot项目里集成Hibernate的示例
    目录在Spring Boot项目中集成Hibernate前言1.引入依赖2.配置数据源3. 创建实体类4.创建Repository5.编写业务代码6.编写控制器,处理http请求7....
    99+
    2023-05-14
    SpringBoot集成Hibernate SpringBoot Hibernate
  • springboot 1.5.2 集成kafka的示例分析
    这篇文章主要介绍springboot 1.5.2 集成kafka的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:随着spring boot 1.5版本的发布,在spring项目中与kafka集成更为...
    99+
    2023-05-30
    springboot kafka
  • SpringBoot集成POI实现Excel导入导出的示例详解
    目录知识准备什么是POIPOI中基础概念实现案例Pom依赖导出Excel导入Excel示例源码知识准备 需要了解POI工具,以及POI对Excel中的对象的封装对应关系。 什么是PO...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作