一、规则文件构成

  package(规则文件所在包)

  import(导入java包)

  global(规则文件中的"全局变量")

  function(函数)

  query(查找)

  rule(规则)

二、重点部分介绍

  1、rule

 rule  "Rule Name"
属性名称 属性值
when
条件
then
行为
end

  以下为在规则中使用的常用属性及其描述:  

    1)agenda-group:为规则设定所属的规则组,当规则组获得焦点时,会匹配组内的规则,如果规则组没有获得焦点,那么组内的规则将不会被触发。

              该属性默认为MAIN。

    2)salience:优先级,数值越大越先执行,这个可以控制规则的执行顺序。从0开始,即0优先级最小。

  2、import

    导入规则文件需要使用到的外部变量

    不仅仅可以是一个类,也可以是这个类中的某一个可访问的静态方法

    1)导入类

    2)导入Java类的静态方法

      import function 类名.静态方法名

      当调用该静态方法时,使用eval()。括号内写"方法名(参数)"。eval(true)参数为布尔值。类似于 while(true)。

三、十二中类型比较操作符

  >  >=  <  <=  ==  !=  contains / not contains / memberOf / not memberOf /matches/ not matches

四、规则的条件部分LHS(Left Hand Side)

  1、

when:规则条件开始。条件可以单个,也可以多个,多个条件一次排列,比如

when

eval(true)

$customer:Customer()

$message:Message(status==0)

上述罗列了三个条件,当前规则只有在这三个条件都匹配的时候才会执行RHS部分,三个条件中第一个

eval(true):是一个默认的api,true 无条件执行,类似于 while(true)

$message:Message(status==0) 这句话标示的:当前的workingMemory存在Message类型并且status属性的值为0的Fact对象,这个对象通常是通过外部java代码插入或者自己在前面已经执行的规则的RHS部分中insert进去的。

前面的$message代表着当前条件的引用变量,在后续的条件部分和RHS部分中,可以使用当前的变量去引用符合条件的FACT对象,修改属性或者调用方法等。可选,如果不需要使用,则可以不写。

  2、对Fact对象private属性的操作可以使用getter和setter方法或.+属性名。

  3、如果条件全部是 &&关系,可以使用“,”来替代,但是两者不能混用。

    如:$customer :Customer(name == "john", age > 20)

五、规则的结果部分RHS(Right Hand Side)

  1、当规则条件满足,则进入规则结果部分执行,结果部分可以是纯java代码。

下面的内容摘抄自http://kingsun1980.iteye.com/blog/459272/,感谢博主的分享!

六、函数Functions

  function可以在规则文件中定义,但更多的是使用外部类中定义的static方法,这样只要Java中可以实现的逻辑,在规则中都可以做为function调用。

七、方言dialect

  在规则表达式中可以使用方言来简化表达式,使之更加具有可读性。

  Drools方言默认的是Java,Drools也支持mvel。

  mvel是一种基于Java应用程序的表达式语言,它支持属性和方法的直接访问。

八、规则的条件部分

  1、目前本人正在使用的两个表达式是eval表达式和内置eval表达式

    如:

      eval表达式

      $account : Account()

      eval(accountService.isUniqueAccountNumber($account))

      内置eval表达式

      $customer1 : Customer()

      Customer(eval(age == $customer1.getAge() + 10))

    

Drools规则文件结构说明的更多相关文章

  1. Drools规则

    1.实现业务逻辑和业务规则的分离,实现业务规则的集中管理 2.可以动态的改变业务规则,从而快速响应需求变更 3.业务分析人员也可以参与编辑.维护系统的业务规则 fact:一个普通的JavaBean插入 ...

  2. 线上故障排查——drools规则引擎使用不当导致oom

    事件回溯 1.7月26日上午11:34,告警邮件提示:tomcat内存使用率连续多次超过90%: 2.开发人员介入排查问题,11:40定位到存在oom问题,申请运维拉取线上tomcat 内存快照dum ...

  3. Drools规则引擎入门指南(一)

    最近项目需要增加风控系统,在经过一番调研以后决定使用Drools规则引擎.因为项目是基于SpringCloud的架构,所以此次学习使用了SpringBoot2.0版本结合Drools7.14.0.Fi ...

  4. drools规则引擎初探

    https://www.cnblogs.com/yuebintse/p/5767996.html 1.drools是什么 Drools是为Java量身定制的基于Charles  Forgy的RETE算 ...

  5. Drools规则引擎

    一.简介 Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules ...

  6. Drools 规则引擎环境搭建

    一.关于 drools 规则引擎 前面写过一篇 Drools 规则引擎相关的文章,这篇文章主要记录一下规则引擎的环境搭建和简单示例.不熟悉 drools 的朋友可以看看这篇文章: 自己写个 Drool ...

  7. Spring Boot+Drools规则引擎整合

    目的 官方的Drools范例大都是基于纯Java项目或Maven项目,而基于Spring Boot项目的很少. 本文介绍如何在Spring Boot项目上加上Drools规则引擎. POM依赖 POM ...

  8. Drools规则引擎-memberOf操作

    场景 规则引擎技术讨论2群(715840230)有同学提出疑问,memberOf的使用过程中如果,memberOf之后的参数不是集合也不是数组,而是格式如"1,2,3,4"的字符串 ...

  9. Drools规则引擎-判断集合(List)是否包含集合

    问题场景 在使用Drools规则引擎时,有朋友会遇到这样的问题,就是在when部分判断的两个参数都是集合类型,比如两个List,此时要判断一个集合是否包含另外一个集合的内容. 拿一个具体的例子来说明, ...

随机推荐

  1. Uva---10881 Piotr's Ants(蚂蚁)

    Problem DPiotr's AntsTime Limit: 2 seconds "One thing is for certain: there is no stopping them ...

  2. IO流--字符流

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java ...

  3. think in java 读书笔记 2 —— 套接字

    目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 套接字基本知识 2 ...

  4. [转载]ME51n,ME52n,ME53n屏幕增强

    原文地址:ME51n,ME52n,ME53n屏幕增强作者:cyzhang811 http://blog.sina.com.cn/s/blog_721b218c0100zch9.html 使用增强:ME ...

  5. 数据库索引<二> 如何创建索引

    前面一篇说法了索引结构,和几种索引在数据表上的结构,了解了索引可以为查询服务,这篇说一说如何创建索引. >平时可能的创建方式 这个系统中要用到A字段,B字段,C字段做为查询的条件,联接的条件较多 ...

  6. 使用 HTML5 canvas 绘制精美的图形

    HTML5 是一个新兴标准,它正在以越来越快的速度替代久经考验的 HTML4.HTML5 是一个 W3C “工作草案” — 意味着它仍然处于开发阶段 — 它包含丰富的元素和属性,它们都支持现行的 HT ...

  7. this和super关键字

    this关键字: 1.引用成员变量 2.通过this(参数列表)调用类的重载的构造方法 3.返回对象的值:使用return this,来返回某个类的引用. super关键字: 1.super是一个引用 ...

  8. BZOJ1218 [HNOI2003]激光炸弹

    题目后面写着DP就当它是DP吧.. 本来是扫描线+线段树的说,但是捏5000^2还是能过滴,于是暴力枚举正方形+所谓的DP就解决了. /******************************** ...

  9. GridControl的用法(1)

    一.属性设置 ①去除gridControl上的筛选条 //去除上面的筛选条            gridView1.OptionsView.ShowGroupPanel = false; ②设置列名 ...

  10. PowerPivot安装完成后创建网站或网站集报错解决办法

    根据上一篇“在现有 SharePoint 服务器上安装 PowerPivot for SharePoint”后,新建网站或网站集时报错,重新配置了一下PowerPivot For SharePoint ...