直接上代码:
第一步,maven引入相关包
4.0.0 com.example demo 0.0.1-SNAPSHOT jar demo Demo project for Spring Boot org.springframework.boot spring-boot-starter-parent 2.0.1.RELEASE UTF-8 UTF-8 1.8 6.1.0.Final org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-webflux org.kie kie-spring ${drools.version} org.drools drools-compiler ${drools.version} org.springframework.boot spring-boot-maven-plugin
第二步,编写一个规则文件:
//包名package testimport com.example.demo.drools.test.Stu;//rule 就是三大块中的规则体,以rule开头,以end 结尾,每个规则文件可以包含多个rule。规则体分为三个部分,LHS RHS 属性 三大部分//LHS:条件部分又被称之为 LeftHand Side,简称为 LHS,在一个规则当中 when 与 then 中间的部分就是 LHS 部分。//在 LHS 当中,可以包含 0~n 个条件,如果 LHS 部分没空的话,那么引擎会自动添加一个eval(true)的条件,由于该条件总是返回 true,所以 LHS 为空的规则总是返回 true。//RHS:结果部分又被称之为 RightHand Side,简称为 RHS,在一个规则当中 then后面部分就是 RHS,只有在 LHS 的所有条件都满足时 RHS 部分才会执行。rule "rule1" salience 1 when $stu:Stu(age>30)//这里就是LHS then System.out.println("age>30岁的人:"+$stu.getName());//RHSendrule "rule2" salience 2 when $stu:Stu(gender=="male",age>25) then System.out.println("性别为男,age>25岁的人:"+$stu.getName()); endrule "rule3" salience 3 when $stu:Stu(getName()=="张三") then System.out.println("名字为:"+$stu.getName()); end
第三步:测试代码
package com.example.demo.drools.test;import org.drools.core.io.impl.ClassPathResource;import org.kie.api.io.ResourceType;import org.kie.internal.KnowledgeBase;import org.kie.internal.KnowledgeBaseFactory;import org.kie.internal.builder.KnowledgeBuilder;import org.kie.internal.builder.KnowledgeBuilderFactory;import org.kie.internal.definition.KnowledgePackage;import org.kie.internal.runtime.StatefulKnowledgeSession;import java.util.ArrayList;import java.util.Collection;import java.util.List;/** * Created by ming on 2018/5/24. */public class Test { public static void main(String[] args) { KnowledgeBuilder kb = KnowledgeBuilderFactory.newKnowledgeBuilder(); kb.add(new ClassPathResource("test.drl"), ResourceType.DRL); Collectioncollection = kb.getKnowledgePackages(); KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase(); knowledgeBase.addKnowledgePackages(collection); StatefulKnowledgeSession statefulSession = knowledgeBase.newStatefulKnowledgeSession(); List list = getStus(); for (Stu stu : list) { statefulSession.insert(stu); } statefulSession.fireAllRules(); statefulSession.dispose(); System.out.println("end...."); } public static List getStus() { List stus = new ArrayList<>(); stus.add(new Stu("张三", 16, "male")); stus.add(new Stu("huhu", 18, "male")); stus.add(new Stu("王五", 32, "male")); stus.add(new Stu("张红", 23, "female")); stus.add(new Stu("李四", 35, "male")); stus.add(new Stu("张小雅", 31, "female")); return stus; }}
package com.example.demo.drools.test;/** * Created by Administrator on 2018/5/24. */public class Stu { private String name; private int age; private String gender; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Stu(String name,int age,String gender){ this.name=name; this.age=age; this.gender=gender; }}
然后看见规则文件生效了....