最近想用一下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