广告
返回顶部
首页 > 资讯 > 后端开发 > Python >drools中使用function的方法小结
  • 531
分享到

drools中使用function的方法小结

2024-04-02 19:04:59 531人浏览 泡泡鱼

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

摘要

目录一、背景二、需求三、前置知识1、function语法结构2、drl文件中如何调用java的静态方法四、实现1、项目结构2、引入drools依赖3、编写kmodule.xml文件4

一、背景

当我们在drools中编写规则时,有些时候存在重复的代码,那么我们是否可以将这些重复代码抽取出来,封装成一个function来调用呢?那么在drools中如何自定义function

二、需求

1、当我们的工作内存中存在Person对象时,则需要调用drl function来判断用户是否可以玩游戏。当Person#age >= 18时可以玩。
2、在then 后面调用java静态方法

三、前置知识

1、function语法结构

function 返回值类型 方法名(方法参数){
	方法体
}

函数的定义需要放置在drl文件中,并且是在规则文件的then之后进行调用。

2、drl文件中如何调用java的静态方法

  • import 类的全限定名。
  • then的部分使用 类名.静态方法名

四、实现

1、项目结构

2、引入drools依赖

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

<dependencies>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
    </dependency>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-mvel</artifactId>
    </dependency>
</dependencies>

一些不重要的依赖省略了,比如logback和lombok

3、编写kmodule.xml文件

<kmodule xmlns="Http://www.drools.org/xsd/kmodule">
    <kbase name="function-kabse" packages="rules" default="false">
        <ksession name="function-ksession" default="false" type="stateful"/>
    </kbase>
</kmodule>

4、编写Person实体类

@Data
@AllArgsConstructor
public class Person {
    private String name;
    private Integer age;
}

5、drl function编写

6、编写测试类

public class DroolsApplication {
    public static void main(String[] args) {
        KieServices kieServices = KieServices.get();
        KieContainer kieContainer = kieServices.getKieClasspathContainer();
        KieSession kieSession = kieContainer.newKieSession("function-ksession");
        kieSession.addEventListener(new DebugRuleRuntimeEventListener());
        Person person = new Person("张三", 16);
        kieSession.insert(person);
        kieSession.fireAllRules();
        kieSession.dispose();
    }
}

7、查看运行结果

到此我们的自定义function功能就完成了。

五、假设我想在when阶段调用function

对于上面这个功能是可以实现的,但是需要借助eval来实现,不过需要通过eval来实现是不好的,而且性能也差。
举例:

rule "rule_eval"
    when
        $person: Person()
        // eval 也可以调用java的静态方法
        eval(playGameOk($person))
    then
        System.out.println("ok");
end

不推荐使用eval
参考链接:https://stackoverflow.com/questions/17487725/how-much-of-a-perfORMance-hit-does-eval-cause-in-drools

六、完整代码

https://gitee.com/huan1993/spring-cloud-parent/tree/master/drools/drools-drl-function

七、参考链接

1、https://stackoverflow.com/questions/17487725/how-much-of-a-performance-hit-does-eval-cause-in-drools
2、https://docs.drools.org/7.69.0.Final/drools-docs/html_single/index.html#drl-functions-con_drl-rules

到此这篇关于drools中使用function的文章就介绍到这了,更多相关drools中使用function内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: drools中使用function的方法小结

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

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

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

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

下载Word文档
猜你喜欢
  • drools中使用function的方法小结
    目录一、背景二、需求三、前置知识1、function语法结构2、drl文件中如何调用java的静态方法四、实现1、项目结构2、引入drools依赖3、编写kmodule.xml文件4...
    99+
    2022-11-13
  • drools中query的用法小结
    目录一、背景二、需求三、前置需求1、query的语法结构2、java中如何获取query的结果四、实现1、无参数query的使用1、drl文件编写2、java文件编写2、有参数que...
    99+
    2022-11-13
  • JS中的reduce()方法使用小结
    目录一、语法二、实例三、其他相关方法过去有很长一段时间,我一直很难理解 reduce() 这个方法的具体用法,平时也很少用到它。事实上,如果你能真正了解它的话,其实在很多地方我们都可...
    99+
    2022-11-12
  • filters.revealTrans.Transition使用方法小结
    filters.revealTrans.Transition使用方法小结:1. 创建Transition对象:使用`var tran...
    99+
    2023-08-17
    使用方法
  • C# 中SqlParameter类的使用方法小结
    在C#中,SqlParameter类用于表示SQL命令中的参数。以下是SqlParameter类的使用方法的小结:1. 创建SqlP...
    99+
    2023-09-08
    C#
  • go mod的使用方法小结
    目录前言1.go modules的基本介绍1.1 提供的命令1.2 提供的环境变量1.2.1 说明2.go modules的基本使用2.1 初始化项目3.使用go mod发布自己的包...
    99+
    2022-11-13
  • Android PopupWindow使用方法小结
    前几天要用到PopupWindow,一时竟想不起来怎么用,赶紧上网查了查,自己写了个demo,并在此记录一下PopupWindow的用法。使用场景PopupWindow,顾名思义,就是弹窗,在很多场景下都可以见到它。例如ActionBar/...
    99+
    2023-05-31
    android popupwindow roi
  • VB.NET Function过程的使用方法
    VB.NET Function过程的使用方法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。VB.NET编程语言的出现,在一定程度上改变了编程人员的编程方式,提高了编程人员的开发...
    99+
    2023-06-17
  • 在vue中使用 jquery 的两种方法小结
    目录vue中使用 jquery的方法方法一方法二vue和jquery混用注意事项vue+jquery应该如何使用呢?vm实例里面如何调用外部的jq方法呢?vue中使用 jquery的...
    99+
    2022-11-13
    vue中使用jquery vue jquery 使用jquery的方法
  • JAVA中STRING的常用方法小结
    一、创建并初始化一个字符串 String b = "hello"; 使用构造方法创建并初始化一个字符串 String();//初始化字符串,表示空字符序列 String(value)...
    99+
    2022-11-15
    JAVA STRING
  • springboot ApplicationContextInitializer的三种使用方法小结
    目录ApplicationContextInitializer的三种使用方法概述1、使用spring.factories方式2、application.properties添加配置方...
    99+
    2022-11-12
  • GoLang中的加密方法小结
    目录GoLang加密方法GoLang三类加密算法哈希算法对称加密非对称加密总结GoLang加密方法 以下Golang代码的加密结果与Java语言结果一致,需要注意结果大小写问题。 p...
    99+
    2023-02-16
    GoLang 加密 GoLang加密方法
  • Java 8 中 Function 接口使用方法介绍
    目录Java 8 中 Function 接口的介绍Function 接口的用法Function 接口的实例Java 8 中 Function 接口的介绍 Java 8 中提供了一个函...
    99+
    2022-11-13
  • Shell脚本中$符号的嵌套使用方法小结
    目录1 示例2 说明本文主要介绍在编写 Shell 脚本时,通过嵌套使用 $ 符号,间接获取变量或表达式的值的具体方法。 先说结论,在 Shell 脚本中,可以通过使用 eval 命令来实现 $ 符号的嵌套使用...
    99+
    2023-05-06
    Shell $符号嵌套 Shell $符号
  • JS中Date的一些常用方法小结
    目录内置对象Date创建Date对象日期的格式化Date对象自带的方法获取时间戳附:获得Date总的毫秒数(距离1970年1月1号过了多少毫秒)总结内置对象Date Date对象在实...
    99+
    2022-11-13
    js date方法 js日期函数date js日期函数
  • Java中switch的三种用法方式小结
    目录标准方式switch - > 用法:switch yield 用法:返回值从java14开始, switch语句有了一个很大的调整, 这就让swicth语句有了更多的操作和...
    99+
    2023-05-16
    Java switch用法 switch yield
  • Loguru基本、进阶使用方法小结。
    loguru简介 loguru是一个开源的Python日志记录器,它提供了简单且易于使用的接口,同时具有高度的可定制性。loguru的特点包括:支持格式化日志、记录到文件或终端、支持自动清理日志、支持...
    99+
    2023-09-14
    linux python pytorch 深度学习
  • python中wordcloud安装的方法小结
    正确安装python中的wordcloud(词云库) 第一步: 这里的√一定要勾选上。 第二步:(检查是否有python的环境变量) 那么python就会自动添加环境...
    99+
    2022-11-11
  • MySQL授权命令grant的使用方法小结
    MySQL授权命令grant的使用方法: 本文实例,运行于 MySQL 5.0 及以上版本。 MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 ...
    99+
    2022-11-12
  • C#调用js库的方法小结
    目录前言安装ClearScript引入js文件创建V8ScriptEngine对象通过js引擎加载js文件C#调用js方法实现经纬度坐标纠偏C#调用js方法判断经纬度点位是否在多边形...
    99+
    2023-05-14
    C#调用js
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作