Drools 介绍
是一个业务规则管理系统,具有基于前向链和后向链推理的规则引擎,允许对业务规则和复杂事件处理进行快速可靠的评估。规则引擎也是创建专家系统的基本构建块,在人工智能中,专家系统是模拟人类专家决策能力的计算机系统。
Drools 架构
Drools 基本使用
条件语法
rools提供了十二中类型比较操作符:< 、<=、>、>=、==、!=、contains、not contains、memberOf、not
memberOf、matches、not matches,并且这些条件都可以组合使用。
三大函数
insert:往当前workingMemory中插入一个新的Fact对象,会触发规则的再次执行,除非使用no-loop限定;
update:更新
modify:修改,与update语法不同,结果都是更新操作
retract:删除
function:定义一个方法
属性语法
- date-expires:设置规则的过期时间
- date-effective:设置规则的生效时间,时间格式同上
- duration:规则定时,duration 3000 ,3秒后执行规则
- salience: 用来设置规则执行的优先级,salience 属性的值是一个数字,数字越大执行优先级越高, 同时它的值可以是一个负数。默认情况下,规则的 salience 默认值为 0。如果不设置规则的 salience 属性,那么执行顺序是随机的。
- timer(1 2)1s 后 每隔两秒执行一次
- timer(cron:0/1 * * * * ?) // 每一秒执行一次
- no-loop: 定义当前的规则是否允许多次循环执行,默认是 false允许循环执行,也就是当前的规则只要满足条件,可以无限次执行。在对当前传入workingMemory中的Fact对象进行修改或者个数的增减,比如update方法,这种操作会触发规则的重新匹配执行。如果是true,则规则只执行一次,如果本身的RHS部分有update等触发规则重新执行的操作,也不会再次执行当前规则。
- lock-on-active: 将lock-on-active属性的值设置为true,可避免因某些Fact对象被修改而使已经执行过的规则再次被激活执行。因为一个规则的重复执行不一定是本身触发的,也可能是其他规则触发的,所以这个是no-loop的加强版
- global 全局变量
- enabled 是否启用规则
- activation-group 规则分组
- agenda-group 该分组配合auto-focus 使用的
高级语法
- query 无参数 和有参数 不同用法
参考资料