网站首页 > 开源技术 正文
1、背景
在我们开发的过程中,可能一个场景需要写多个规则,但是某些规则和别的规则又是互斥的关系。即某个规则成立时,不管其余的规则是否成立,其余的规则都不再执行。那么这种场景该如何处理呢?
2、需求
假设我们有三个规则 rule-01、rule-02和rule-03,当rule-02执行后,那么rule-03必须终止执行。
3、实现方案
1、通过Fact判断
即当rule-02规则执行后,修改Fact中的某个属性,设置规则已执行,后续规则发现是已执行则不在执行规则。
2、通过全局变量判断
在drools中使用全局变量进行判断。
3、通过halt方法
当我们在drl文件中调用drools.halt()方法后,它会立即终止它后面的规则,即后面的规则都不再执行。
此处我们通过halt方法来实现。
4、实现上述需求
4.1 drl 文件编写
package rules
/**
需求:在 "rule-01" 和 "rule-02" 规则执行完之后,终止规则 "rule-03" 的执行
*/
rule "rule-01"
salience 3
when
then
System.out.println(drools.getRule().getName());
end
rule "rule-02"
salience 2
when
then
System.out.println(drools.getRule().getName());
// 终止下方的 "rule-03" 规则的执行
drools.halt();
end
rule "rule-03"
salience 1
when
then
System.out.println(drools.getRule().getName());
end
上述的规则比较简单,通过salience设置规则的优先级,值越大优先级越高。when后面没有条件,说明规则都会通过模式匹配,即都可能会执行。但是rule-02规则的then部分有drools.halt(),说明,该规则执行完之后,它后方激活的规则需要终止执行。
4.2 运行结果
rule-01
rule-02
可以看到rule-03没有输出出来,说明这个规则被终止执行了。
5、完整代码
https://gitee.com/huan1993/spring-cloud-parent/tree/master/drools/drools-termination-rule
猜你喜欢
- 2024-10-02 drools中no-loop和lock-on-active的区别
- 2024-10-02 drools中使用全局变量(全局变量errno)
- 2024-10-02 基于Flink和规则引擎的实时风控解决方案
- 2024-10-02 IF嵌套层数太多?试试Drools规则引擎
- 2024-10-02 规则引擎Drools 6.5 Final 入门(规则引擎使用案例场景)
- 2024-10-02 JAVA-工作流引擎-activiti-Tasks介绍
- 2024-10-02 drools中使用function(drools实例)
- 2024-10-02 drools执行指定的规则(drools使用)
- 2024-10-02 Drools在eclipse中的安装与验证(eclipse安装installation folder)
- 2024-10-02 drools规则属性(rule attributes)的使用
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)