关于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 类型,同样也可以用 > , ==,

rule "string compare"

salience -20

when

/*字符串的数字也是可以比较的*/

$user : User((age>"15" && 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中的属性的具体类型,统统都可以在字符上加上引号,不用区别对待,爽爽爽!!

python 规则引擎 drools_Drools规则引擎详解-常用的drl实例相关推荐

  1. mysql 规则引擎_Drools规则引擎详解-常用的drl实例

    package droolsDemo //说明:每个 drl 都必须声明一个包名,这个包名与 Java 里面的不同,它不需要与文件夹的层次结构一致, //主要用于可以根据kmodule.xml中不同的 ...

  2. OCR引擎Tesseract以及pytesseract详解及实例

    OCR引擎Tesseract以及pytesseract详解及实例 目录 OCR引擎Tesseract以及pytesseract详解及实例 谷歌开源OCR引擎Tesseract Tesseract的安装 ...

  3. 代码检查规则:Java语言案例详解

    本节课程为<代码检查规则:Java语言案例详解>, 通常情况下Java的代码检查规则可以分为以下十类: 接下来,让我们具体来看看每个分类的内容. 一.源文件规范 该类规范主要从文件名.文件 ...

  4. ThinkPHP模版引擎之变量输出详解

    ThinkPHP模版引擎之变量输出详解 使用ThinkPHP开发有一定时间了,今日对ThinkPHP的模板引擎变量解析深入了解了一下,做出一些总结,分享给大家供大家参考.具体分析如下: 我们已经知道了 ...

  5. [转]《战地3》寒霜2引擎渲染流程图文详解

    一直一来受制于技术.预言和环境,中国国内玩家.开发者对于国外先进游戏引擎的渲染流程知之甚少,虽然没有技术封锁缺更似自我封锁,在GDC上很少看到中国开发者的身影,无法学习到先进的开发经验. 首先来回味一 ...

  6. python镜像下载包_python包详解

    干货大礼包!21天带你轻松学Python(文末领取更多福利) 点击查看课程视频地址 本课程来自于千锋教育在阿里云开发者社区学习中心上线课程<Python入门2020最新大课>,主讲人姜伟. ...

  7. Python中数组切片的用法详解

    Python中数组切片的用法详解 一.python中"::-1"代表什么? 二.python中":"的用法 三.python中数组切片 三.numpy中的整数数 ...

  8. 21年最新Python面试题及答案汇总详解(上)

    错过三月找工作的机会,还要错过四月的好时期吗?Python面试你做准备了吗?下面小编整理了一套2021年最新Python常见面试题目,及Python面试题目答案汇总.希望能够帮助到大家. 21年最新P ...

  9. python popen阻塞_对Python subprocess.Popen子进程管道阻塞详解

    问题产生描述 使用子进程处理一个大的日志文件,并对文件进行分析查询,需要等待子进程执行的输出结果,进行下一步处理. 出问题的代码 # 启用子进程执行外部shell命令 def __subprocess ...

最新文章

  1. 程序员又背锅?美团外卖声明“杀熟会员”是技术原因,软件定位缓存导致配送费不准!网友:程序员太惨!...
  2. leetcode算法题--在排序数组中查找数字 I
  3. 第九周项目实践2 二叉树遍历的递归算法
  4. PowerShell自动删除过期数据
  5. JVM详解之:java class文件的密码本
  6. RHEL 8 - 用podman compose替代docker compose运行Ansible Tower
  7. Android 虚线分割Shape
  8. Python基础——类(Class)
  9. 【面试题】百度糯米java工程师面试
  10. eclipse(window平台)快捷键总结
  11. python数据结构与算法 pdf_数据结构与算法:Python语言描述.pdf
  12. JavaWeb(二)框架搭建篇
  13. 利用go破解带密码的rar压缩文件
  14. windows打开cmd的几种方式
  15. Java关于Eclipse下载速度慢的解决办法!
  16. USACO-Fractions to Decimals
  17. B站小甲鱼Python基础学习课堂笔记
  18. Privacy Policy of Clone App
  19. [gdc13]古墓丽影DirectX11技术
  20. github使用教程linux,GitHub Linux下使用方法

热门文章

  1. VSAN常见故障2018-11-06
  2. php图片生成缩略图_php实现根据url自动生成缩略图的方法
  3. 50道编程小题目之【完数】
  4. 停止对人类的迷恋!AI完全模仿人类大脑是在浪费时间
  5. linux下安装rar解压包
  6. webpack2 项目
  7. Swift - 判端网络连接状态,连接类型(3G还是Wifi)
  8. HDU4025 Equation of XOR [二分+状态压缩]
  9. NSString删除换行符号
  10. 在Windows XP中轻松发传真