DROOLS(JBOSS RULES )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。
规则引擎的基本套路是:用一套规则,去检查数据是否符合规则,如果符合规则,那么可以在数据上执行一些操作(增删查改都可以)。
规则是写在drools脚本里的,以 .drl 格式结尾
数据就存在 Java 的类实例中。规则引擎跑起来的时候,需要将数据放在一个 Session 的结构中,规则只会对 Session 中的数据进行检查。
一、简单入门
现在用Drools实现一个最简单的功能:用户可以在系统提交申请,如果用户年龄小于18岁,则判断申请是无效的。
本文章使用的是IDEA+Gradle开发,Drools版本:7.25.0.Final
1.项目结构结构展示
2.环境准备
2.1 IDEA安装Drools插件
使用IDEA开发需要安装Drools插件
新建文件中出现Drools Rule File即为插件安装成功
2.2 添加Gradle依赖
//drools
compile 'org.kie:kie-api:7.25.0.Final'
compile 'org.kie:kie-internal:7.25.0.Final'
compile 'org.drools:drools-core:7.25.0.Final'
compile 'org.drools:drools-compiler:7.25.0.Final'
compile 'org.drools:drools-decisiontables:7.25.0.Final'
compile 'org.drools:drools-templates:7.25.0.Final'
3.项目创建步骤
3.1 先创建一个对象Applicant
package drools.sample;
public class Applicant {
public String name;
public int age;
public boolean valid;
@Override
public String toString() {
return "Applicant{" +
"name='" + name + '\'' +
", age=" + age +
", valid=" + valid +
'}';
}
}
3.2 创建规则文件validAge
package drools.sample;
dialect "mvel"
rule "validAge"
when
$a : Applicant( age < 18 ) // 规则
then
// 符合规则后执行的操作,是Java代码
System.out.println("----------------rule执行开始---------------");
$a.valid = false;
System.out.println($a.name + "小于18岁,不能申请");
System.out.println("----------------rule执行结束---------------");
end
注意:规则文件也有 package 名,这个package名必须和Main函数所在的package一致!!!
3.3 编写执行处理类
也可以用main方法,本人习惯使用单元测试
package drools.sample;
import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
public class App {
@Test
public void test01(){
//建立了规则引擎执行环境,创建了一个 Session
KieServices ks = KieServices.Factory.get();
KieContainer kc = ks.newKieClasspathContainer();
KieSession kSession = kc.newKieSession("ksession1");
//创建了一个申请对象,设置年龄15岁
Applicant a = new Applicant();
a.name = "Xiao,ming";
a.age = 15;
a.valid = true;
System.out.println(a);
//把该对象插入到 Session 中
kSession.insert(a);
//执行规则
kSession.fireAllRules();
//规则执行完成,清理 Session 中的数据
kSession.dispose();
System.out.println(a.valid);
System.out.println(a);
}
}
3.4 运行App
运行Drools需要一个XML配置,固定名称叫kmodule.xml,默认位置在这里
内容如下:
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
<kbase name="kbase1" packages="drools.sample">
<ksession name="ksession1" />
</kbase>
</kmodule>
XML配置定义了规则所属的 package (要和.drl文件里的 package 名一致)。还定义了一个Session,这里的ksession的name要与App里创建的 Session名称要一致。
3.5 运行结果解读
本示例的目的虽然只是想获得判断申请的结果,但是a.valid 其实也是作为实例的一个变量,所以,可以通过drools可以实现根据规则,修改内存里变量的目的。
参考文章:链接: Drools7.x环境搭建与简单示例.