idea项目中使用Drools规则引擎的简单例子

如需转载分享,请标明出处,且不用于盈利为目的,谢谢合作!             

                                                                   idea项目中使用Drools规则引擎的简单例子

项目结构如图:

idea项目中使用Drools规则引擎的简单例子_第1张图片

1.首先在pom.xml文件添加以下依赖(最新版本:7.17.0.Final)



    4.0.0

    com.yss.drools
    drools
    1.0-SNAPSHOT
    
        7.17.0.Final
        3.7
        4.12
    

    
        
            junit
            junit
            ${junit.version}
            test
        

        
        
            org.kie
            kie-api
            ${drools.version}
        

        
            org.drools
            drools-compiler
            ${drools.version}
        

        
            org.drools
            drools-core
            ${drools.version}
        
        
            org.drools
            drools-decisiontables
            ${drools.version}
        
        
            org.drools
            drools-templates
            ${drools.version}
        

        
        
            org.apache.commons
            commons-lang3
            ${commons-lang3.version}
        
        
        
            org.projectlombok
            lombok
            true
        
        
            org.projectlombok
            lombok
            1.16.22
        


    

2.在resources目录下创建文件discount.drl,内容如下:

package cn.yss.drools
import com.yss.drools.Car//可以导入类,静态方法
rule "age>30"
salience 2
no-loop true
when
    $car : Car(person.age > 30)
    then
        $car.setDiscount(80);
    end

3.在 resources/META-INF 目录下创建 kmodule.xml 文件,kmodule.xml 用来描述知识库资源的选择及知识库与会话的配置,内容如下:


    
    
        
    

4.创建实体类Car和Person

package com.yss.drools;

import lombok.Data;

@Data
public class Car {

   private int discount = 100;
   private Person person;

}

package com.yss.drools;

import lombok.Data;

@Data
public class Person {
   private String name;
   private Integer age;
}

5.编写测试类,测试效果

package day0219;

import com.yss.drools.Car;
import com.yss.drools.Person;
import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

public class Demo {
   @Test
   public void Test() {
      //从工厂中获得KieServices实例
      KieServices kieServices = KieServices.Factory.get();
      //默认自动加载 META-INF/kmodule.xml
      //从KieServices中获得KieContainer实例,其会加载kmodule.xml文件并load规则文件
      KieContainer kieContainer = kieServices.getKieClasspathContainer();
      //kmodule.xml 中定义的 ksession name
      //建立KieSession到规则文件的通信管道
      //kieSession有状态, 维护会话状态,type=stateful  最后结束要调用dispose()
      //statelessKieSession无状态,不会维护会话状态 type=stateless
      KieSession kieSession = kieContainer.newKieSession("all-rules");

      Person p1 = new Person();
      p1.setAge(32);
      Car car = new Car();
      car.setPerson(p1);

      kieSession.insert(car);//插入到working memory

      int count = kieSession.fireAllRules();//通知规则引擎执行规则
      System.out.println(count);
      System.out.println(car.getDiscount());

      kieSession.dispose();
   }
}

 

你可能感兴趣的:(规则引擎)