在《Drools7 规则引擎视频教程》中已经讲到,使用modify或update的时候在某种程度上会导致死循环。

昨天一同学在使用Drools规则引擎时便遇到了该问题。下面看该同学贴出来的规则代码:

首先我们来分析一下上面的代码,上面的代码中这位同学讲一个相同的Map,传递进入两个规则中,在规则的then部分中会对map的属性值进行更新。为了防止死循环他使用了no-loop属性。

但是问题依旧存在。为什么呢?其实这跟no-loop使用的功能有关,no-loop的作用是限制因为modify等更新操作导致规则重复执行,但是有一个限定条件,是当前规则中进行更新导致当前规则重复执行。而不是防止其他规则更新相同的fact对象,导致当前规则更新。

因此,针对以上问题,不仅仅要解决当前规则自身引起的更新,还需要解决其他规则更新fact对象引起的更新。这时还需要使用ock-on-active true属性配置。

lock-on-active true这个属性,可以限制当前规则只会被执行一次,包括当前规则的重复执行不是本身触发的。是no-loop的加强版。

另外,针对这段代码的编写,这位同学还犯了另外一个错误,就是When中的判断条件。两个规则中都用了两个判断条件。$map:Map()相当于一个判断条件;Map(…)又相当于一个判断条件。其实这两个判断条件应该合并成一个,如这样的形式:$map:Map(…)。大家在使用的过程中注意不要犯类似的错误。

更多学习途径

更多关于Drools规则引擎的视频教程和学习群组,访问此处。

帮你解决疑难问题,扫码加入Drools规则引擎星球:

Drools 规则引擎死循环问题解决相关推荐

  1. drools规则引擎耗费内存问题解决

    背景 公司使用drools规则引擎过程中,一个规则文件中差不多10个rule,每一次访问都需要耗费800M内存,导致频繁GC,同时classloader实例数每构建一次都会增加,导致nonHeap区内 ...

  2. drools规则引擎因为内存泄露导致的内存溢出

    进入这个问题之前,先了解一下drools: 在很多行业应用中比如银行.保险领域,业务规则往往非常复杂,并且规则处于不断更新变化中,而现有很多系统做法基本上都是将业务规则绑定在程序代码中. 主要存在的问 ...

  3. SpringBoot整合Drools规则引擎动态生成业务规则

    最近的项目中,使用的是flowable工作流来处理业务流程,但是在业务规则的配置中,是在代码中直接固定写死的,领导说这样不好,需要规则可以动态变化,可以通过页面去动态配置改变,所以就花了几天时间去研究 ...

  4. Drools规则引擎之常用语法

    一.基础api 在 Drools 当中,规则的编译与运行要通过Drools 提供的各种API 来实现,这些API 总体来讲可以分为三类:规则编译.规则收集和规则的执行.完成这些工作的API 主要有Kn ...

  5. drools规则引擎的在项目中的使用手记

    需求 按照登录用户的会员等级 和签到周期 根据一定的计算规则送积分.由于之前都是通过if else去做的控制.规则变更的时候可能需要重新调整代码甚至发布服务. 由于不想再每次规则变更后需要调整代码,于 ...

  6. Spring Boot整合Drools规则引擎实例

    1.DRools介绍 官网:https://www.drools.org/ 规则引擎主要完成的就是将业务规则从代码中分离出来. DRools一款由JBoss组织提供的基于Java语言开发的开源规则引擎 ...

  7. Drools 规则引擎

    官网:https://www.drools.org/ 累了听听歌:http://www.hy57.com/p/158102.html 1. 快速度入门 1. 导入依赖 <dependencies ...

  8. Drools规则引擎基础教程

    前言 曾经接触过一个电信移动通讯项目,每个案件大量的业务逻辑变更,但其实里面的业务改动,其实就是一些业务逻辑变动. 而程序员编写的代码也没有任何技术含量,跟着式样书逐字逐句的翻译就行.大量的if/el ...

  9. 详解:Drools规则引擎探究

    引入 ▐ 问题引入 天猫奢品业务方为了吸引更多的新客,和提高会员的活跃度,做了一期活动,通过购买天猫奢品频道内的任意商品就赠送特殊积分,积分可以直接兑换限量的奢品商品.假如业务方给的规则如下: 主刃同 ...

最新文章

  1. Golang 笔记 1 基础、基本数据类型
  2. 单引号内的双引号内的双引号怎么写
  3. Android---Service(生命周期、启动方式、服务通信、实战演练、思维导图、高级音乐播放器-源码)
  4. Excel 2013中单元格添加下拉列表的方法
  5. 【设计模式系列】行为型之责任链模式
  6. leetcode-125 Valid Palindrome
  7. tperformancegraph_列车运行实绩图,train performance graph,音标,读音,翻译,英文例句,英语词典...
  8. 网站左侧悬浮框随着滚动条滚动代码
  9. php中如果想要打印出来的结果换行怎么操作_现在,就要对文件的批操作,动刀子啦!!!...
  10. 研发项目wbs分解简单案例_wbs分解案例
  11. 用Java解决牛客网题目JD1年终奖
  12. 与错误共生,迎接成功-墨菲定律教给我的道理
  13. 计算机主板常见故障检修,主板常见故障检查与维修
  14. 免费Web托管公司000Webhost被黑 1350万明文密码泄露
  15. 深圳面试一周记录——.NET(B/S)开发
  16. 简单了解Linux操作系统中的防火墙软件及其部署案例解析
  17. 新月开始了-不解之谜也开始了
  18. [程序员福利] 获取Lynda视频课程免费账户
  19. c语言goord函数,php的chr和ord函数实现字符加减乘除运算实现代码
  20. hiredis linux 编译,linux下的hiredis的安装和使用

热门文章

  1. 2022技术趋势预测,Python、Java占主导,Rust、Go增长迅速,元宇宙成为关注焦点
  2. 细细品味Flex——BlazeDS开发指南
  3. 《Educated》《你当像鸟飞往你的山》阅读笔记
  4. Linux ALSA 之二:ALSA 声卡与设备
  5. 信息素养—学术研究的必修课习题答案(week1-6)(第1-3章)
  6. java语言的编译器命令_Java编译器的命令是( )
  7. 零基础小白入门Python,值得看的几本书籍
  8. Your endpoint configuration is wrong
  9. 论文中常用的数学短语
  10. Android 7.1 车机 Android 系统 在线升级,将安装到下载到/data/目录下面