Drools规则
1.实现业务规则的集中管理
2.可以动态的改变业务规则,从而快速响应需求变更
fact:一个普通的JavaBean插入到规则的WorkMemory当中后的对象
1.Drools提供的API,API可以分为三类:规则编译,规则执行
knowledgeBuilder作用:编译编写好的规则,生产规则包,knowledgePackage
Drools当中提供了两个对象与规则引擎进行交互:statefulKnowledgeSession与StatelesKnowledgeSession
与规则引擎进行交互交,(用来接收业务数据,执行规则的)
fact是指在Drools规则应用当中,将一个普通的JavaBean插入到规则的WorkingMemory当中后的对象,fact是原来的对象的引用,规则与应用系统数据交互的桥梁和通道
2.drools的规则文件当中package对于规则文件中规则的管理只限于逻辑上的管理
对于同一package 下的用户自定义函数、自定义的查询等,不管这些函数与查询是否在
同一个规则文件里面,在规则里面是可以直接使用的,这点和Java 的同一package 里的Java
类调用是一样的。
LHS left hand side 条件部分
[绑定变量名:]Object([field 约束])
;绑定变量不仅可以用在对象上,也可以用在对象的属性上面,命名方法与
对象的命名方法相同;“field 约束”是指当前对象里相关字段的条件限制
比较操作符::>、>=、<、<=、= =、!=、contains、not contains、
memberof、not memberof、matches、not matches
not contains :not contains 作用与contains 作用相反,not contains 是用来判断一个Fact 对象的某个字
段(Collection/Array 类型)是不是包含一个指定的对象,和contains 比较符相同,它也只能
用在对象的field 当中
RHS
结果部分部分又被称之为Right Hand Side,简称为RHS,在一个规则当中then 后面部分就
是RHS,只有在LHS 的所有条件都满足时RHS 部分才会执行。
在RHS 当中可以使用LHS 部分当中定义的绑定变量名、设置的全局变量、或者是直
接编写Java 代码(对于要用到的Java 类,需要在规则文件当中用import 将类导入后方能使
用,这点和Java 文件的编写规则相同
在 Drools 当中,在RHS 里面,提供了一些对当前Working Memory 实现快速操作的宏
宏函数或对象,比如insert/insertLogical、update 和retract 就可以实现对当前Working Memory
中的Fact 对象进行新增、删除或者是修改
一旦调用insert 宏函数,那么Drools 会重新与所有的规则再重新匹配一次,对于没有设
置no-loop 属性为true 的规则,如果条件满足,不管其之前是否执行过都会再执行一次,这
个特性不仅存在于insert 宏函数上,后面介绍的update、retract 宏函数同样具有该特
salience”的属性,该属性的作用是通过一个数字来确认
规则执行的优先级,数字越大,执行越靠前
因为一旦
调用insert、update 或retract 函数,Drools 会重新与所有的规则再重新匹配一次,对于没有
设置no-loop 属性为true 的规则,如果条件满足,不管其之前是否执行过都会再执行一次。
salience 1
no-loop true,如果添加no-loop 属性为true,那么Customer的name 属性将只会输出一次。
update(new FactHandle(),new Object());它可以支持创建一个新的Fact 对象,从而把FactHandle
对象指定的Fact 对象替换掉,从而实现对象的全新更新
宏对象,宏函数,drools
如果您希望在规则文件里更多的实现对当前的Working Memory 控制,那么可以使用
drools 宏对象实现,通过使用drools 宏对象可以实现在规则文件里直接访问Working
Memory。在前面介绍update 宏函数的时候我们就使用drools 宏对象来访问当前的Working
Memory,得到一个指定的Fact 对象的FactHandle。同时前面介绍的insert、insertLogical、
update 和retract 宏函数的功能皆可以通过使用drools 宏对象来实现
kcontext = knowledgeRuntime
属性部分:
规则的属性共有13 个,它们分别是:activation-group、agenda-group、
auto-focus、date-effective、date-expires、dialect、duration、enabled、lock-on-active、no-loop、
ruleflow-group、salience、when,
salience:规则执行的优先级,越大优先级越高,默认值为0
no-loop:控制已经执行过的规则在条件再次满足时是否再次执行,默认为false,
引擎 检查规则
date-effective:控制规则只有在到达后才会触发,在规则运行时,引擎会自动拿当前操作
系统的时候与date-effective 设置的时间值进行比对,只有当系统时间>=date-effective 设置的
时间值时,规则才会触发执行,否则执行将不执行,dd-MMM-yyyy,25-Sep-2009,修改默认的格式:System.setProperty("drools.dateformat","yyyy-MM-dd");
date-expires:那么会
将这个属性的值与当前系统时间进行比对,如果大于系统时间,那么规则就执行,否则就不
执行
enable:定义一个规则是否可用的,默认为true
dialect:该属性用来定义规则当中要使用的语言类型,目前Drools5 版本当中支持两种类型的语
言:mvel 和java,默认是Java语言
duration(期间):如果设置了该属性,那么规则将在该属性指定的值之后在另外一个
线程里触发,单位毫秒,duration 3000
agenda-group:规则的调用与执行是通过StatelessSession 或StatefulSession 来实现的,一般的顺序是创
建一个StatelessSession 或StatefulSession,将各种经过编译的规则的package 添加到session
当中,接下来将规则当中可能用到的Global 对象和Fact 对象插入到Session 当中,最后调用
fireAllRules 方法来触发、执行规则
function :唯一不同之处就是在Drools 的函数定义当中没有可见范围的设定,而Java 当中可
以通过public、private 之类来设置方法的可见范围
import function
查询 在Drools 当中查询可分为两种:一种是不需要外部传入参数;一种是需要外部传入参
数。查询的内容就是查询的条件部分,条件部分内容的写法与规则的LHS 部
分写法完全相同
QueryResults ->QueryResultsRow->Fact
对象的定义:
在 Drools 当中,可以定义两种类型的对象:一种是普通的类型Java Fact 的对象;另一
种是用来描述Fact 对象或其属性的元数据对象。
通过使用import function 关键字,将test.RuleTools 类中静态方法
printInfo 引入到当前规则文件中
mvel
Drools规则的更多相关文章
- 线上故障排查——drools规则引擎使用不当导致oom
事件回溯 1.7月26日上午11:34,告警邮件提示:tomcat内存使用率连续多次超过90%: 2.开发人员介入排查问题,11:40定位到存在oom问题,申请运维拉取线上tomcat 内存快照dum ...
- Drools规则引擎入门指南(一)
最近项目需要增加风控系统,在经过一番调研以后决定使用Drools规则引擎.因为项目是基于SpringCloud的架构,所以此次学习使用了SpringBoot2.0版本结合Drools7.14.0.Fi ...
- drools规则引擎初探
https://www.cnblogs.com/yuebintse/p/5767996.html 1.drools是什么 Drools是为Java量身定制的基于Charles Forgy的RETE算 ...
- Drools规则引擎
一.简介 Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules ...
- Drools 规则引擎环境搭建
一.关于 drools 规则引擎 前面写过一篇 Drools 规则引擎相关的文章,这篇文章主要记录一下规则引擎的环境搭建和简单示例.不熟悉 drools 的朋友可以看看这篇文章: 自己写个 Drool ...
- Spring Boot+Drools规则引擎整合
目的 官方的Drools范例大都是基于纯Java项目或Maven项目,而基于Spring Boot项目的很少. 本文介绍如何在Spring Boot项目上加上Drools规则引擎. POM依赖 POM ...
- Drools规则引擎-memberOf操作
场景 规则引擎技术讨论2群(715840230)有同学提出疑问,memberOf的使用过程中如果,memberOf之后的参数不是集合也不是数组,而是格式如"1,2,3,4"的字符串 ...
- Drools规则引擎-判断集合(List)是否包含集合
问题场景 在使用Drools规则引擎时,有朋友会遇到这样的问题,就是在when部分判断的两个参数都是集合类型,比如两个List,此时要判断一个集合是否包含另外一个集合的内容. 拿一个具体的例子来说明, ...
- Drools规则引擎-如果判断某个对象中的集合是否包含指定的值
规则引擎集合相关处理 在实际生产过程中,有很多关于集合的处理场景,比如一个Fact对象中包含有一个集合,而需要判断该集合是否包含某个值.而Drools规则引擎也提供了多种处理方式,比如通过from.c ...
随机推荐
- 常用的shell命令
作为一名有10年以上使用年龄的Linux/MacOSX用户来说,键盘的作用往往要远大于鼠标.而且,作为一个黑客文化的追随者,我也希望越来越多的用户能认识到命令行的潜在价值,不要把它视为只是计算机专家们 ...
- 【ZOJ1003】Crashing Balloon(DFS)
Crashing Balloon Time Limit: 2 Seconds Memory Limit: 65536 KB On every June 1st, the Children's ...
- ASP.NET(转自wiki)
ASP.NET是由微软在.NET Framework框架中所提供,开发Web应用程序的类库,封装在System.Web.dll文件中,显露出System.Web名字空间,并提供ASP.NET网页处理. ...
- linux一些常用配置
1.vi编辑退出不清屏 .bashrc最后加: 2.
- Maven新建webapp项目index.jsp报错
最近用eclipse新建了一个maven项目,结果刚新建完成index.jsp页面就报错了,先把错误信息贴出来看看 后来就找资料,结果发现两种解决办法,希望可以帮助用得上的人! 第一种:直接在pom. ...
- python(29)强大的zip函数
zip函数:它是python的内建函数,(与序列有关的内建函数有:sorted().reversed().enumerate().zip()),其中sorted()和zip()返回一个序列(列表)对象 ...
- Audio 的一些小笔记
1.在做项目的过程中,对于volume 我们有一个volume curve,就是 0~63 step,每个step对应一个dB值,例如0step对应-90dB, 63 step对应0dB.关于这个0d ...
- 栈,队列的java实现
介绍 http://501565246-qq-com.iteye.com/blog/2047078 实现: http://blog.csdn.net/zsw101259/article/details ...
- 带你入门带你飞Ⅱ 使用Mocha + Chai + SuperTest测试Restful API in node.js
目录 1. 简介 2. 准备开始 3. Restful API测试实战 Example 1 - GET Example 2 - Post Example 3 - Put Example 4 - Del ...
- 爬虫之scrapy框架
解析 Scrapy解释 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓 ...