Drools规则引擎入门demo

简单介绍

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

开发环境搭建

intellij+maven环境下

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

hello world

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


    Drools规则引擎入门demo_第1张图片
    image.png
  • kmodule.xml



    
        
    

注意,此处的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_第2张图片
    运行结果

你可能感兴趣的:(Drools规则引擎入门demo)