drools中使用function的方法小结
目录
- 一、背景
- 二、需求
- 三、前置知识
- 1、function语法结构
- 2、drl文件中如何调用java的静态方法
- 四、实现
- 1、项目结构
- 2、引入drools依赖
- 3、编写kmodule.xml文件
- 4、编写Person实体类
- 5、drl function编写
- 6、编写测试类
- 7、查看运行结果
- 五、假设我想在when阶段调用function
- 六、完整代码
- 七、参考链接
一、背景 当我们在
drools
中编写规则时,有些时候存在重复的代码,那么我们是否可以将这些重复代码抽取出来,封装成一个function
来调用呢?那么在drools
中如何自定义function
?二、需求 1、当我们的工作内存中存在
Person
对象时,则需要调用drl function
来判断用户是否可以玩游戏。当Person#age >= 18
时可以玩。2、在
then
后面调用java
的静态方法
。三、前置知识
1、function语法结构
文章图片
function 返回值类型 方法名(方法参数){ 方法体}
【drools中使用function的方法小结】
函数的定义
需要放置在drl
文件中,并且是在规则文件的then
之后进行调用。2、drl文件中如何调用java的静态方法
- import 类的全限定名。
- 在
then
的部分使用类名.静态方法名
四、实现
1、项目结构
文章图片
2、引入drools依赖
org.drools drools-bompom 7.69.0.Final importorg.drools drools-compilerorg.drools drools-mvel
一些不重要的依赖省略了,比如
logback和lombok
。3、编写kmodule.xml文件
4、编写Person实体类
@Data@AllArgsConstructorpublic 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))thenSystem.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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 20-2-4 安卓软件中加载较大图片导致crash(Failed to allocate a xxx byte allocation with xxxfree bytes)的问题
- 五指APP和用户中心源码含数据库
- uniapp-使用心得
- 关于android中数据库的创建以及基础的增删改查的相应操作
- Java 中的 BigDecimal,80% 的人竟然都用错了。。。
- 13.Android-ListView使用BaseAdapter/ArrayAdapter/SimpleAdapter适配器使用
- 微信小程序内如何使用vant-weapp组件
- Android中的Service基础
- 如何在Windows上使用实时用法示例安装NMAP()
- 如何在Gmail的G Suite中使用域别名