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