drools规则的入门使用
阅读原文时间:2023年07月08日阅读:1

1:pom文件


org.drools drools-compiler 7.10.0.Final
junit junit 4.12

2.新建 kmodule.xml

路径 resources\META-INF\kmodule.xml


3.drl 文件

路径 resources\rules\test.drl

import com.example.serviceorder.vo.Person

dialect "mvel"

rule "age"
when
$person : Person(name=='小明')
then
$person.setAge(11);
System.out.println("我叫:"+$person.getName()+",现在:"+$person.getAge()+"岁");
end

rule "age1"
when
$person : Person(name=='小黑')
then
$person.setAge(13);
System.out.println("我叫:"+$person.getName()+",现在:"+$person.getAge()+"岁");
end

rule "age2"
when
$person : Person(name=='小白')
then
$person.setAge(14);
System.out.println("我叫:"+$person.getName()+",现在:"+$person.getAge()+"岁");
end

4. 实体

package com.example.serviceorder.vo;

/**
* @author lwq
* @date 2022/6/5 21:38
* @desciption: 测试
*/
public class Person {

private String name;  
private int age;  

public String getName() {  
    return name;  
}  

public void setName(String name) {  
    this.name = name;  
}  

public int getAge() {  
    return age;  
}  

public void setAge(int age) {  
    this.age = age;  
}  

}

5.测试类

private static KieContainer container = null;
private KieSession statefulKieSession = null;

@Test
public void test111() {

KieServices kieServices = KieServices.Factory.get();  
container = kieServices.getKieClasspathContainer();  
statefulKieSession = container.newKieSession("all-rules");  
Person person = new Person();  

person.setName("小白");  

statefulKieSession.insert(person);  
statefulKieSession.fireAllRules();  
statefulKieSession.dispose();

  System.out.println(JSON.toJSON(person));

}
6.打印结果
{"name":"小白","age":14}

7.动态加载规则工具类

package com.example.serviceorder.util;

import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.KieRepository;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

/**
* @author lwq
* @date 2022/6/5 22:02
* @desciption: Drools工具类
*/
public class DroolsUtil {
private static KieContainer container = null;

public static <T> T execute(T t, String rule) {  

    container = load(rule);  
    KieSession kieSession = container.newKieSession();  
    kieSession.insert(t);  
    kieSession.fireAllRules();  
    kieSession.dispose();  
    return t;  
}  

private static KieContainer load(String rule) {  

    KieServices kieServices = KieServices.Factory.get();  
    KieRepository repository = kieServices.getRepository();  

    KieFileSystem kieFileSystem = kieServices.newKieFileSystem();  
    kieFileSystem.write("src/main/resources/rules" + "test.drl", rule);  
    KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);  
    kieBuilder.buildAll();  

    return kieServices.newKieContainer(repository.getDefaultReleaseId());  

}  

}
8.测试动态加载规则工具类

@Test
public void test1112() {
//rule 规则可以存在数据库一个字段里面 oracle 数据库可以使用 clob 类型
//mysql 数据库可以使用 longtext类型
//也可以放到 redis 里面

String rule="\\n" +  
        "import com.example.serviceorder.vo.Person\\n" +  
        "\\n" +  
        "dialect  \\"mvel\\"\\n" +  
        "\\n" +  
        "rule \\"age\\"\\n" +  
        "    when\\n" +  
        "        $person : Person(name=='小明')\\n" +  
        "    then\\n" +  
        "        $person.setAge(11);\\n" +  
        "       System.out.println(\\"我叫:\\"+$person.getName()+\\",现在:\\"+$person.getAge()+\\"岁\\");\\n" +  
        "end\\n" +  
        "\\n" +  
        "rule  \\"age1\\"\\n" +  
        "    when\\n" +  
        "        $person : Person(name=='小黑')\\n" +  
        "    then\\n" +  
        "        $person.setAge(13);\\n" +  
        "      System.out.println(\\"我叫:\\"+$person.getName()+\\",现在:\\"+$person.getAge()+\\"岁\\");\\n" +  
        "end\\n" +  
        "\\n" +  
        "rule \\"age2\\"\\n" +  
        "    when\\n" +  
        "        $person : Person(name=='小白')\\n" +  
        "    then\\n" +  
        "        $person.setAge(14);\\n" +  
        "      System.out.println(\\"我叫:\\"+$person.getName()+\\",现在:\\"+$person.getAge()+\\"岁\\");\\n" +  
        "end";  

Person person = new Person();  


person.setName("小明");

_DroolsUtil.execute(person, rule);

System.out.println(JSON.toJSON(person));  

}_

6.打印结果
{"name":"小明","age":11}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章