Drools规则文件结构说明
一、规则文件构成
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规则文件结构说明的更多相关文章
- Drools规则
1.实现业务逻辑和业务规则的分离,实现业务规则的集中管理 2.可以动态的改变业务规则,从而快速响应需求变更 3.业务分析人员也可以参与编辑.维护系统的业务规则 fact:一个普通的JavaBean插入 ...
- 线上故障排查——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,此时要判断一个集合是否包含另外一个集合的内容. 拿一个具体的例子来说明, ...
随机推荐
- 重装系统(win7)
-_-|| 第一次装,可谓艰难险阻 一:准备 1.U盘(大小至少4G)——本人用了4G的 2.查询自己的电脑进入BIOS的方法——本人电脑机型为华硕X550VC,开机长按F2(当时为保险起见,也同时按 ...
- poj---(2886)Who Gets the Most Candies?(线段树+数论)
Who Gets the Most Candies? Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 10373 Acc ...
- Roman to Integer [LeetCode]
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...
- Text Justification [LeetCode]
Problem Description:http://oj.leetcode.com/problems/text-justification/ Note: Just be careful about ...
- 你不知道的JavaScript--大白话讲解Promise
转载:http://blog.csdn.net/i10630226/article/details/50867792 一.Promise小试 复杂的概念先不讲,我们先简单粗暴地把Promise用一下, ...
- Sql server 日期函数和日期转换
时间函数 SQL Server Date 函数 下面的表格列出了 SQL Server 中最重要的内建日期函数: 函数 描述 GETDATE() 返回当前日期和时间 DATEPART(Type,dat ...
- RAID5和RAID10,哪种RAID更适合你(上)
[IT168 专稿]存储是目前IT产业发展的一大热点,而RAID技术是构造高性能.海量存储的基础技术,也是构建网络存储的基础技术.专家认为,磁盘阵列的性能优势得益于磁盘运行的并行性,提高设备运行并行度 ...
- [python学习]结合开源库学习python
代码碎片1 #!/usr/bin/python # please add your code here! import matplotlib matplotlib.use('Agg') import ...
- BZOJ4033 [HAOI2015]T1
令$f[p][i]$表示以$p$为根的子树内,选了$i$个黑点,剩下的都是白点的这个子树内贡献的答案 如果$p$的子树都算出来了,只要计算$p$与$fa[p]$之间的边对答案的贡献就好了,贡献是$di ...
- ext afteredit
ext afteredit详解 grid.on("afteredit",afterEidt,grid); function(obj) { obj.row;;//修改过的行从0开始 ...