ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

drools规则的入门使用

2022-06-05 23:03:16  阅读:222  来源: 互联网

标签:drools 入门 Person age rule person 规则 println name


1:pom文件

 

<!--drools-->
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>7.10.0.Final</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

2.新建 kmodule.xml

路径 resources\META-INF\kmodule.xml

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
<kbase name="rules">
<ksession name="all-rules"/>
</kbase>
</kmodule>

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}




 

标签:drools,入门,Person,age,rule,person,规则,println,name
来源: https://www.cnblogs.com/wanqiang/p/16345455.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有