Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值。Drools 允许使用声明方式表达业务逻辑。可以使用非 XML 的本地语言编写规则,从而便于学习和理解。并且,还可以将 Java 代码直接嵌入到规则文件中,这令 Drools 的学习更加吸引人。
Drools 还具有其他优点:
- 非常活跃的社区支持
- 易用
- 快速的执行速度
- 在 Java 开发人员中流行
- 与 Java Rule Engine API(JSR 94)兼容
Drools 是业务逻辑集成平台,被分为4个项目:
- Drools Guvnor (BRMS/BPMS):业务规则管理系统
- Drools Expert (rule engine):规则引擎,drools的核心部分
- Drools Flow (process/workflow):工作流引擎
- Drools Fusion (cep/temporal reasoning):事件处理
官网:http://www.drools.org/#
官方文档:http://www.drools.org/learn/documentation.html
Drools语法
规则文件
规则文件可以使用 .drl文件,也可以是xml文件,这里我们使用drl文件
规则文件
package:对一个规则文件而言,package是必须定义的,必须放在规则文件第一行,package的名字是随意的,不必必须对应物理路径,跟java的package的概念不同,这里只是逻辑上的一种区分
如:
package com.sankuai.meituan.waimai.drools.demo
import:导入规则文件需要使用到的外部规则文件或者变量,这里的使用方法跟java相同,但是不同于java的是,这里的import导入的不仅仅可以是一个类,也可以是这个类中的某一个可访问的静态方法
import com.drools.demo.point.PointDomain;
rule:定义一个具体规则。rule "ruleName"。一个规则可以包含三个部分:
-
属性部分:
定义当前规则执行的一些属性等,比如是否可被重复执行、过期时间、生效时间等。 -
条件部分(LHS):
定义当前规则的条件,如 when Message(); 判断当前workingMemory中是否存在Message对象。 -
结果部分(RHS):
即当前规则条件满足后执行的操作,可以直接调用Fact对象的方法来操作应用。这里可以写普通java代码
rule部分
rule "ruleName"
n