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规则的入门使用的更多相关文章

  1. Drools规则引擎入门指南(一)

    最近项目需要增加风控系统,在经过一番调研以后决定使用Drools规则引擎.因为项目是基于SpringCloud的架构,所以此次学习使用了SpringBoot2.0版本结合Drools7.14.0.Fi ...

  2. Drools规则引擎入门指南(三)——使用Docker部署Workbench

    其实本来我也是打算使用Tomcat来部署Workbench的,但是在网上看了几篇文章,超级繁琐的配置.各种版本.实在看不下去了索性就直接使用Docker来部署了.本次部署的版本是最新稳定版,对应dro ...

  3. Drools规则引擎入门指南(二)

    本篇博客主要讲解Drools常用的属性以及函数 属性 首先我们在resources\rules文件夹下创建一个Property.drl,还有一个DroolsApplicationPropertyTes ...

  4. Drools规则引擎

    一.简介 Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules ...

  5. Drools规则引擎-如果判断某个对象中的集合是否包含指定的值

    规则引擎集合相关处理 在实际生产过程中,有很多关于集合的处理场景,比如一个Fact对象中包含有一个集合,而需要判断该集合是否包含某个值.而Drools规则引擎也提供了多种处理方式,比如通过from.c ...

  6. Drools规则引擎-如果Fact对象参数为null如何处理

    问题场景 在技术交流群(QQ:715840230)中有同学提出这样的问题: 往kiesession里面传入fact,如果不做输入检查fact里面有些字段可能是null值.但是如果在外面做输入检查,规则 ...

  7. Drools 规则引擎应用

    规则引擎-drools 1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 .... ...

  8. Drools 规则引擎应用 看这一篇就够了

    1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 ...... 1.2传统做法 1 ...

  9. Drools规则

    1.实现业务逻辑和业务规则的分离,实现业务规则的集中管理 2.可以动态的改变业务规则,从而快速响应需求变更 3.业务分析人员也可以参与编辑.维护系统的业务规则 fact:一个普通的JavaBean插入 ...

  10. 线上故障排查——drools规则引擎使用不当导致oom

    事件回溯 1.7月26日上午11:34,告警邮件提示:tomcat内存使用率连续多次超过90%: 2.开发人员介入排查问题,11:40定位到存在oom问题,申请运维拉取线上tomcat 内存快照dum ...

随机推荐

  1. evil 控制窗口大小,比快捷键方便

    下面是vim原本的支持的键 可以用于 emacs evil ,evil 用这个比用快捷键还方面些 1.纵向调整 :res[ize] num 指定当前窗口为num列num行 :res[ize] +num ...

  2. linux09-分区挂载

    1.Linux分区简要介绍 Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux中每个分区都是用来组成整个文件系统的一部分. Linux ...

  3. springBoot集成flowable

    前言 Flowable可以十分灵活地加入你的应用/服务/构架.可以将JAR形式发布的Flowable库加入应用或服务,来嵌入引擎. 以JAR形式发布使Flowable可以轻易加入任何Java环境:Ja ...

  4. el-input 限制只能输入正整数

    1.前端页面 <el-row :gutter="20"> <el-col :span="20"> <el-form-item la ...

  5. NETAPP硬盘更换

    netapp硬盘新增 一.找到坏盘,插上新盘# 1.登陆到想要点亮的硬盘相对应的控制器上,并进去高级模式. priv set advanced 2.利用disk show -v 查看想要点亮的硬盘名字 ...

  6. JAVA 进阶第一阶段 59-69

    10/10号笔记 私有与公共 用private在类中定义的成员变量 只有在这个类的内部才支持访问和编写 public 公共的 用这个定义的在任何地方都可以访问 比如public calss clock ...

  7. 一文详解 jitpack 多渠道maven库发布

    先说一下,为什么会有这篇文章? 最初接触 JitPack 时,发现网络上大量涉及JitPack的教程不可用.通过两天的研究才搞明白: 1.不同的gradle版本,gradle api使用方式 与 Ji ...

  8. 有趣的python库-tkinter

    tkinter-GUI编程用 与pyqt.wxpython一样,python三大gui库之一,用来写图形化界面很有意思,下面举个整蛊小例子. 实现烦人的弹窗 import tkinter as tk, ...

  9. [NOI Online 2022 提高组] 如何正确地排序

    \(\text{Solution}\) 当 \(m=2\) 时,\(ans=2n\sum a_{i,j}\) 当 \(m=3\) 时 当然先套路地考虑某一行的贡献,记为第 \(x\) 行 则当取 \( ...

  10. 首个比较研究表明维持期强柱患者减量续用TNFi疗效尚佳且药费省

    首个比较研究表明维持期强柱患者减量续用TNFi疗效尚佳且药费省 Zavada J, et al. Ann Rheum Dis. 2016,75: 96-102. 电邮发布日期: 2016年5月4日 关 ...