美文网首页spring boot规则
Drools规则引擎入门demo

Drools规则引擎入门demo

作者: kevin0016 | 来源:发表于2019-06-16 17:32 被阅读194次

简单介绍

互联网旧系统维护中往往存在非常多的规则(比如:age < 16 || age > 50 -> REJECT )。最便捷的实现就是用 if-else 来写,但是随着规则的增加以及需求的变动,代码将变得越来越难阅读和变动。这时候就要引入Drools等规则引擎了。Drools就是为了解决业务代码和业务规则分离的引擎。

开发环境搭建

intellij+maven环境下

  • 安装JBoss Drools Support插件。主要是为了intellij可以识别drools文件,使用快捷的智能提示。
  • maven依赖中引入开发包
 <dependency>
       <groupId>org.drools</groupId>
       <artifactId>drools-compiler</artifactId>
       <version>6.5.0.Final</version>
   </dependency>

hello world

  • 需求:判断一个人的 age < 16 || age > 50 的时候,打印年龄不符合要求。
    1、创建maven工程,引入依赖
    2、新建配置文件/src/resources/META-INF/kmodule.xml
    3、新建drools规则文件/src/resources/rules/age.drl
    项目结构图


    image.png
  • kmodule.xml

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
    <kbase name="hello" packages="drl">
        <ksession name="ksession-hello"/>
    </kbase>
</kmodule>

注意,此处的packages要和文件结构路径下的drl文件存储路径一致

  • Person
@Getter
@Setter
public class Person {
    private String name ;
    private Integer age ;

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}
  • age.drl
import com.koolearn.drools.po.Person                    // 导入类
   dialect  "mvel"

   rule "age"                                          // 规则名,唯一
       when
           $person : Person(age<16 || age>50)          //规则的条件部分
       then
       System.out.println($person.getName()+":的年龄为"+$person.getAge()+"====不符合要求!");
   end
   rule "rightAge"                                      // 规则名,唯一
        when
             $person : Person(age>=16 && age<=50)       //规则的条件部分
        then
            System.out.println($person.getName()+":的年龄为"+$person.getAge()+"====符合要求!");
   end
  • test 类
public class HelloTest {

    private static KieContainer container = null;
    private KieSession statefulKieSession = null;

    @Test
    public void test() {
        KieServices kieServices = KieServices.Factory.get();
        container = kieServices.getKieClasspathContainer();
        statefulKieSession = container.newKieSession("myAgeSession");
        Person person = new Person("Kevin",12);
        statefulKieSession.insert(person);
        statefulKieSession.fireAllRules();
        Person person2 = new Person("Jack",50);
        statefulKieSession.insert(person2);
        statefulKieSession.fireAllRules();

        statefulKieSession.dispose();
    }
}
  • 运行调用


    运行结果

相关文章

  • Drools规则引擎入门demo

    简单介绍 互联网旧系统维护中往往存在非常多的规则(比如:age < 16 || age > 50 -> REJE...

  • drools的简单入门案例

    一、背景 最近在学习规则引擎drools,此处简单记录一下drools的入门案例。 二、为什么要学习drools ...

  • SpringBoot入门建站全系列(三十四)使用Drools规则

    SpringBoot入门建站全系列(三十四)使用Drools规则引擎做排班系统 一、概述 Drools 是用 Ja...

  • Drools

    一. Drools规则引擎 Drools就是为了解决业务代码和业务规则分离的引擎。Drools 规则是在 Java...

  • Drools规则引擎入门(2)

    最近项目需要增加风控系统,在经过一番调研以后决定使用Drools规则引擎。因为项目是基于SpringCloud的架...

  • Drools 规则动态编译运行

    背景 近期遇到一个规则引擎项目,甲方明确要求用Drools规则引擎,之前想象中Drools应该应用在风控、预警类场...

  • Drools介绍与使用

    Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值。Drools 允...

  • Drools集成SpringBootStarter

    1.说明 基于fast-drools-spring-boot-starter,能够方便的将规则引擎Drools集成...

  • Drools详解

    Drools规则引擎的结构示意图 Drools相关概念 事实(Fact):对象之间及对象属性之间的关系 规则(ru...

  • 规则引擎_Drools

    01、背景 技术产生的背景: 概念拆解:规则的引擎 规则,在怎样的情况(条件)下做什么事情(结论),转化为伪代码:...

网友评论

    本文标题:Drools规则引擎入门demo

    本文链接:https://www.haomeiwen.com/subject/ngpgfctx.html