Drools 规则引擎死循环问题解决

简介: Drools 规则引擎死循环问题解决

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

昨天一同学在使用Drools规则引擎时便遇到了该问题。下面看该同学贴出来的规则代码:image.png首先我们来分析一下上面的代码,上面的代码中这位同学讲一个相同的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(…)。大家在使用的过程中注意不要犯类似的错误。




目录
相关文章
|
Java
Java实现计数器
Java实现计数器可以使用以下代码
424 0
|
Java 开发者 Spring
Spring Framework 中的 @Autowired 注解:概念与使用方法
【4月更文挑战第20天】在Spring Framework中,@Autowired 注解是实现依赖注入(Dependency Injection, DI)的一种非常强大的工具。通过使用 @Autowired,开发者可以减少代码中的引用绑定,提高模块间的解耦能力
1229 6
|
6月前
|
人工智能 Java 定位技术
Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
本文详细讲解了Java开发者如何基于Spring AI Alibaba框架玩转MCP(Model Context Protocol),涵盖基础概念、快速体验、服务发布与调用等内容。重点包括将Spring应用发布为MCP Server(支持stdio与SSE模式)、开发MCP Client调用服务,以及在Spring AI Alibaba的OpenManus中使用MCP增强工具能力。通过实际示例,如天气查询与百度地图路线规划,展示了MCP在AI应用中的强大作用。最后总结了MCP对AI开发的意义及其在Spring AI中的实现价值。
1487 9
|
存储 Java 应用服务中间件
Java规则引擎Drools急速入门
Java规则引擎Drools急速入门
Java规则引擎Drools急速入门
|
机器学习/深度学习 自然语言处理 数据可视化
学习Anaconda一定要了解这几件事
学习Anaconda一定要了解这几件事
469 3
|
SQL 分布式计算 分布式数据库
OceanBase是什么
OceanBase是什么【8月更文挑战第11天】
799 61
|
JavaScript Java Spring
@Async异步失效的9种场景
在Spring中,启用@Async异步功能需要在启动类或配置类上使用`@EnableAsync`。若未使用此注解,@Async将无效。另外,内部方法调用(如在一个类的方法中调用另一个被@Async注解的方法)会导致异步功能失效,因为这不涉及Spring的AOP代理。此外,@Async方法必须是public,返回类型为void或Future,不能是static或final,且其所在的类需被@Service等注解以使Spring管理。如果使用@ComponentScan,确保正确扫描包含@Async类的包路径。
344 1
|
计算机视觉
增量学习中Task incremental、Domain incremental、Class incremental 三种学习模式的概念及代表性数据集?
本文介绍了增量学习中的三种主要模式:任务增量学习(Task-incremental)、域增量学习(Domain-incremental)和类别增量学习(Class-incremental),它们分别关注任务序列、数据分布变化和类别更新对学习器性能的影响,并列举了每种模式下的代表性数据集。
1814 4
增量学习中Task incremental、Domain incremental、Class incremental 三种学习模式的概念及代表性数据集?
|
12月前
|
存储 NoSQL MongoDB
MongoDB 8.0现已全面可用
如何从MongoDB旧版本升级至8.0,可登录参考升级指南:https://www.mongodb.com/zh-cn/docs/manual/tutorial/upgrade-revision/
|
运维 安全 开发工具
打破代码评审难落地魔咒,轻松构建基于代码评审的研发流程和文化
本文介绍小布快跑,高效协同,如何轻松构建基于代码评审的研发工作流。
464 2