最近想用一下drools这个规则引擎,但是网上好像很多教程都是基于eclipse的,根据网上的教程以及官网整合了一版idea中基于springboot使用drools的教程

源码:https://github.com/VioletSY/drools

 

(1)新建一个springboot项目,选依赖的时候加上spring web,lombok的依赖

 

(2)加入drools需要的依赖,

 <!-- drools -->
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-core</artifactId>
            <version>7.17.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-compiler</artifactId>
            <version>7.17.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-decisiontables</artifactId>
            <version>7.17.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-templates</artifactId>
            <version>7.17.0.Final</version>
        </dependency>

maven库中的jar包是我手动从官网下下来放到maven库的,下载地址https://download.jboss.org/drools/release/

 

(3)新建实体类(在包:com.songyan.drools.model)

package com.songyan.drools.model;

import lombok.Data;

/**
 * @author songyan
 * @date 2021/4/13 10:30
 * @desc 学生
 **/
@Data
public class Student {

    /**
     * 姓名
     */
    private String name;

    /**
     * 年龄
     */
    private int age;

    /**
     * 班级
     */
    private String className;

    /**
     * 构造函数
     * @param name 姓名
     * @param age 年龄
     */
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 方便打印查看属性值
     * @return 学生对象序列化
     */
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", className='" + className + '\'' +
                '}';
    }

}

 

(4)新建规则(在目录:src/main/resources/rules/rules.drl)

package rules

import com.songyan.drools.model.Student

/**
 * 一年级学生规则:年龄为8岁
 */
rule "classForOne"
    when
        student: Student(age ==8)
    then
        student.setClassName("一年级");
    end

/**
 * 二年级学生规则:年龄为九岁
 */
rule "classForTwo"
    when
        student: Student(age==9)
    then
        student.setClassName("二年级");
    end

/**
 * 三年级学生规则:年龄为10岁
 */
rule "classForThree"
    when
        student: Student(age==10)
    then
        student.setClassName("三年级");
    end

 

(5)编写配置文件

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

 

 (6)新增测试类

package com.songyan.drools;

import com.songyan.drools.model.Student;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

class DroolsApplicationTests {

    public static void main(String[] args) {
        KieServices ks = KieServices.Factory.get();
        KieContainer kieContainer = ks.getKieClasspathContainer();
        Student student = new Student("张三",8);
        Student student2 = new Student("李四",9);
        Student student3 = new Student("王五",10);
        KieSession kieSession = kieContainer.newKieSession("rulesSession");
        kieSession.insert(student);
        kieSession.insert(student2);
        kieSession.insert(student3);
        kieSession.fireAllRules();
        kieSession.dispose();
        System.out.println("******************************");
        System.out.println(student);
        System.out.println(student2);
        System.out.println(student3);
        System.out.println("******************************");
    }

}

 

 (7)打印结果

 

(8)目录结构

 

 

(9)github地址

 https://github.com/VioletSY/drools

 

posted on 2021-04-13 11:01  song.yan  阅读(1071)  评论(0编辑  收藏  举报