天天看点

Drools入门——HelloWorld

前言

Drools(JBoss Rules )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。

上面这段关于Drools的简介来源于百度百科,一开始接触Drools感觉规则引擎很难理解,各种高大上的概念。但是随着之后的学习和了解,其实Drools就是通过相关的API处理规则文件,然后基于规则文件处理数据。

个人感觉就是把业务规则部分从硬编码改为编写规则文件,然后提供修改和加载规则文件的API来实现灵活性。

学习要点

  1. Drools的核心项目KIE
  2. kmodule.xml
  3. 规则文件drl文件的编写

HelloWorld实例

pom文件配置

<!--jar包版本号-->
<properties>
    <drools.version>6.5.0.Final</drools.version>
    <slf4j.version>1.7.2</slf4j.version>
</properties>

<dependencies>
    <!--引入drools-->
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
        <version>${drools.version}</version>
    </dependency>
    <!--引入第三方日志-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
</dependencies>
           

编写kmodule.xml文件

在main/resources目录下新增一个META-INF目录,然后在这个目录下新增一个kmodule.xml文件,文件内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
    <!-- kbase是规则库(规则文件的集合),默认会扫描resouces下所有的规则文件,允许有多个kbase-->
    <kbase name="hello_world_kbase" >
        <!--kesession是和存储规则库的容器通讯的会话-->
        <ksession name="hello_world_session"></ksession>
    </kbase>
</kmodule>
           

编写规则文件

在main/resources目录下新增HelloWorld.drl文件,内容如下:

//定义规则名称
rule "HelloWorld"
    //当判断条件的结果为true则执行then部分的逻辑,这里是直接执行
    when eval( true)
    //输出Hello World
    then System.out.println("Hello World");
//结束定义
end
           

增加日志配置

在main/resources目录下新增log4j.properties文件,内容如下:

log4j.rootLogger =INFO,console

log4j.appender.console = org.apache.log4j.ConsoleAppender  
log4j.appender.console.Target = System.out  
log4j.appender.console.layout = org.apache.log4j.PatternLayout  
log4j.appender.console.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%p]-[%c] %m%n 
           

编写代码与规则文件交互

//引入的类
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;


//获取Drools的KieServices实现
KieServices kieServices = KieServices.Factory.get();
//获取Classpath下的KieContainer,默认读取resources/META-INF/kmodule.xml
KieContainer kieContainer = kieServices.getKieClasspathContainer();
//根据ksessionName创建KieSession对象,要与kmodule.xml中定义的ksession的name属性一致
KieSession kieSession = kieContainer.newKieSession("hello_world_session");
//触发这个session绑定的所有规则
kieSession.fireAllRules();
           

继续阅读