drools执行完某个规则后终止别的规则执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了drools执行完某个规则后终止别的规则执行相关的知识,希望对你有一定的参考价值。

参考技术A 在我们开发的过程中,可能一个场景需要写多个规则,但是某些规则和别的规则又是互斥的关系。 即某个规则成立时,不管其余的规则是否成立,其余的规则都不在执行。 那么这种场景该如何处理呢?

假设我们有三个规则 rule-01 、 rule-02 和 rule-03 ,当 rule-02 执行后,那么 rule-03 必须终止执行。

即当 rule-02 规则执行后,修改 Fact 中的某个属性,设置规则已执行,后续规则发现是已执行则不在执行规则。

在drools中使用全局变量进行判断。

当我们在 drl 文件中调用 drools.halt() 方法后,它会立即终止它后面的规则,即后面的规则都不在执行。

此处我们通过 halt 方法来实现。

上述的规则比较简单,通过 salience 设置规则的优先级,值越大优先级越高。 when 后面没有条件,说明规则都会通过模式匹配,即都可能会执行。但是 rule-02 规则的 then 部分有 drools.halt() ,说明,该规则执行完之后,它后方激活的规则需要终止执行。

可以看到 rule-03 没有输出出来,说明这个规则被终止执行了。

https://gitee.com/huan1993/spring-cloud-parent/tree/master/drools/drools-termination-rule

以上是关于drools执行完某个规则后终止别的规则执行的主要内容,如果未能解决你的问题,请参考以下文章

Drools只执行一个规则或者执行完当前规则之后不再执行其他规则(转)

算法实践:递归思想及其运用

源码分析:规则引擎提交策略

记一个并发规则验证实现

iptable规则的执行顺序

htaccess正则规则学习笔记整理