Drools入门——HelloWorld

深碍√TFBOYSˉ_ 2022-06-01 02:55 333阅读 0赞

前言

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

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

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

学习要点

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

HelloWorld实例

pom文件配置

  1. <!--jar包版本号-->
  2. <properties>
  3. <drools.version>6.5.0.Final</drools.version>
  4. <slf4j.version>1.7.2</slf4j.version>
  5. </properties>
  6. <dependencies>
  7. <!--引入drools-->
  8. <dependency>
  9. <groupId>org.drools</groupId>
  10. <artifactId>drools-compiler</artifactId>
  11. <version>${drools.version}</version>
  12. </dependency>
  13. <!--引入第三方日志-->
  14. <dependency>
  15. <groupId>org.slf4j</groupId>
  16. <artifactId>slf4j-log4j12</artifactId>
  17. <version>${slf4j.version}</version>
  18. </dependency>
  19. </dependencies>

编写kmodule.xml文件

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

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

编写规则文件

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

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

增加日志配置

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

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

编写代码与规则文件交互

  1. //引入的类
  2. import org.kie.api.KieServices;
  3. import org.kie.api.runtime.KieContainer;
  4. import org.kie.api.runtime.KieSession;
  5. //获取Drools的KieServices实现
  6. KieServices kieServices = KieServices.Factory.get();
  7. //获取Classpath下的KieContainer,默认读取resources/META-INF/kmodule.xml
  8. KieContainer kieContainer = kieServices.getKieClasspathContainer();
  9. //根据ksessionName创建KieSession对象,要与kmodule.xml中定义的ksession的name属性一致
  10. KieSession kieSession = kieContainer.newKieSession("hello_world_session");
  11. //触发这个session绑定的所有规则
  12. kieSession.fireAllRules();

发表评论

表情:
评论列表 (有 0 条评论,333人围观)

还没有评论,来说两句吧...

相关阅读