Drools入门——HelloWorld
前言
Drools(JBoss Rules )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。
上面这段关于Drools的简介来源于百度百科,一开始接触Drools感觉规则引擎很难理解,各种高大上的概念。但是随着之后的学习和了解,其实Drools就是通过相关的API处理规则文件,然后基于规则文件处理数据。
个人感觉就是把业务规则部分从硬编码改为编写规则文件,然后提供修改和加载规则文件的API来实现灵活性。
学习要点
- Drools的核心项目KIE
- kmodule.xml
- 规则文件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();
还没有评论,来说两句吧...