文档章节

Drools规则引擎详解-常用的drl实例

蜗牛伊
 蜗牛伊
发布于 2019/12/13 19:03
字数 1093
阅读 53
收藏 0

关于Drools规则引擎,之前已经写了几篇相关文章,如果大家不熟悉的可以移步了解下:

规则引擎概览

Drools规则引擎详解-规则属性

Drools规则引擎详解-语法及组件

本篇博客主要为大家列举一些常用,简单的drl文件,帮助大家更加深入地了解其drl文件地编写格式及常用的操作符

 

说明:每个 drl 都必须声明一个包名,这个包名与 Java 里面的不同,它不需要与文件夹的层次结构一致,
主要用于可以根据kmodule.xml中不同的package属性来指定加载哪个.drl文件,
packages="org.some.pkg"表示ksession2只会加载org.some.pkg下的规则文件,如果没写,则默认加载所有的规则文件。

关于kmodule.xml的更多详情,可以参考:Drools规则引擎详解-语法及组件

package droolsDemo

导入实体类,规则判断都是通过实体类的属性来进行比较的

import com.rulesengine.drools.User
import com.rulesengine.drools.Pet
import com.rulesengine.drools.Dog
import com.rulesengine.drools.BoolTest

每一条规则都有一个唯一的名字,必须有,如果有重名,会在引擎加载drl文件中报错。

rule "multiple condition"


salience值越大越先匹配,还有其他的属性设置能够帮助我们实现不同的需求,比如 分组,过期设置,是否循环等等。可以参考:Drools规则引擎详解-语法及组件

salience 1
    when
        //多个条件测试:user中age在15-30 60-90之间并且 根据user的pet属性的color来处理不同的逻辑,
        $user : User((age>15 && age<30)||(age>60 && age<90))
        $pet : Pet() from $user.pet
        if($pet.getColor()=="black") do[black]
        // do 关键结束后,后续逻辑继续,break 关键字结束后结束程序
        if($pet.getColor()=="white") break[white]
    then
        System.out.print("测试结束");
    then [black]
        System.out.println("pet color is balck");
    then [white]
        System.out.print("pet color is white");
     end

字符串的比较可以用 == 代替 equals方法,十分方便,$pet是Pet类的一个引用。

rule "String test"                                   
    when
        $pet : Pet(name=="cat")
    then
        System.out.println("宠物名称符合条件");

end

当然,下面的例子表明,即使 User类的age 字段是Integer 类型,同样也可以用 > , ==, <等符号进行比较,请注意后面的数字是加了引号的,这种方式是支持的,也就是说,我们再也不用考虑因为字段的类型是Integer还是String,而考虑要不要加引号的问题了。

rule "string compare"
    salience -20
     when
     /*字符串的数字也是可以比较的*/
        $user : User((age>"15" && age<"40")||(age>"60"))
     then
         System.out.println("我的优先级是 -20");
         //此规则匹配后不再匹配其他规则
         drools.halt();
      end

下面的这个规则同样很有意思,可以用BigInteger来解决大数(超过64位)的比较,支持直接用>=, == ,=< 符号直接比较,十分方便 ,开发中可以用来解决IPv6 的比较

rule "BigInteger test"
     salience 20
      when
         $dog : Dog(age=="21262780079976241822035969236715638783")
      then
         System.out.println("我等于21262780079976241822035969236715638783");
       end

 

boolean类型的比较value=="true"或者value==true都是支持的

rule "test bool "
          salience 100
           when
           //即使value为boolean类型,也可以这样比较
              $bool : BoolTest(value=="true")
           then
               System.out.println("I am true");
            end

contains 以及not contains 可以测试集合中是否包含某个对象

rule "test contains and not contains"
          salience 200
           when
           
              $user : User(set contains "360")
           then
               System.out.println("测试表明包含 360");
            end

测试not in  年龄不在15-30 60-90 之间的符合,注意数字加不加引号都可以

rule "test not in"
     salience 100
           when
           
              $user : User(!((age>15 && age<30)||(age>60 && age<90)))
           then
               System.out.print("age不在 15-30,60-90之间");
            end

 

总结一下,个人觉得drools最为强大的一点是,无论是Integer,Boolean,BigInteger,String这几种类型都是支持> ,< ,==这种简单的操作符号的,开发中十分方便,不用管bean中的属性的具体类型,统统都可以在字符上加上引号,不用区别对待,爽爽爽!!

今天就聊到这里,更详细的语法请参考:http://docs.jboss.org/drools/release/6.5.0.Final/drools-docs/html_single/index.html#d0e4235*/

 

© 著作权归作者所有

蜗牛伊
粉丝 6
博文 64
码字总数 66060
作品 0
成都
程序员
私信 提问
使用 Drools 规则引擎实现业务逻辑

要求施加在当今软件产品上的大多数复杂性是行为和功能方面的,从而导致组件实现具有复杂的业务逻辑。实现 J2EE 或 J2SE 应用程序中业务逻辑最常见的方法是编写 Java 代码来实现需求文档的规则...

银月光海
2016/02/18
1.2K
0
漫话规则引擎(4): Java规则引擎规范:JSR94

1 概述 JSR-94是JCP(Java Community Process)制定的关于Java规则引擎API的规范,包括接口定义和示例代码。于2004年8月发布。 JSR-94定义了javax.rules和javax.rules.admin,前者包含了Java规则...

银月光海
2016/02/18
335
0
[Drools]JAVA规则引擎2 -- Drools实例

上一篇文章 http://blog.csdn.net/quzishen/archive/2011/01/25/6163012.aspx 描述了一些常用的drools的语法标签和一个模拟实例即发送积分的场景,这一片优化了一下代码,在此贴一下,希望有...

商者
2016/03/29
275
0
小明历险记:规则引擎drools教程一

小明是一家互联网公司的软件工程师,他们公司为了吸引新用户经常会搞活动,小明常常为了做活动加班加点很烦躁,这不今天呀又来了一个活动需求,我们大家一起帮他看看。 小明的烦恼 活动规则是...

纯洁的虫纸
2017/08/07
0
0
【撸码师整合】基于Spring + Drools6.4规则引擎代码实例

简介 官网地址:http://drools.org/ 关于Drools(官网简介直接Copy过来) Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules Engine (BRE)......

开源中国首席撸码官
2016/06/12
4.4K
4

没有更多内容

加载失败,请刷新页面

加载更多

如何为MVC-3转换为4应用程序添加对System.Web.Optimization的引用

我正在最近从MVC 3转换为MVC 4 beta的项目中尝试使用新的捆绑功能。 它需要global.asax中的一行代码, BundleTable.Bundles.RegisterTemplateBundles(); ,这需要using System.Web.Optimiza...

技术盛宴
今天
79
0
Kettle自定义jar包供javascript使用

我们都知道 Kettle 是用 Java 语言开发,并且可以在 JavaScript 里面直接调用 java 类方法。所以有些时候,我们可以自定义一些方法,来供 JavaScript 使用。 本篇文章有参考自:https://www...

CREATE_17
昨天
114
0
处理CSV文件中的逗号

我正在寻找有关如何处理正在创建的csv文件的建议,然后由我们的客户上传,并且该值可能带有逗号(例如公司名称)。 我们正在研究的一些想法是:带引号的标识符(值“,”值“,”等)或使用|...

javail
昨天
79
0
计算一个数的数位之和

计算一个数的数位之和 例如:128 :1+2+8 = 11 public int numSum(int num) { int sum = 0; do { sum += num % 10; } while ((num = num / 10) > 0); return sum;......

SongAlone
昨天
128
0
为什么图片反复压缩后普遍会变绿,而不是其他颜色?

作者:Lion Yang 链接:https://www.zhihu.com/question/29355920/answer/119088684 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 业余版概要:安卓的...

shzwork
昨天
85
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部