java规则引擎一:Drools

本文详细介绍Drools规则引擎的使用方法,包括Maven依赖配置、kmodule.xml文件创建、UserBean对象定义、规则文件rule.drl编写及测试类实现。通过具体示例展示如何在Java项目中应用Drools进行条件判断和动作触发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Drools是一个基于java的开源规则引擎, 规则引擎基本都只有一个逻辑就可以解释清楚: when…then… 当达到什么条件的时候,触发某一个动作。 Drools是java项目中常用的规则引擎之一。

规则引擎的应用场景单一,但是用处很大。 例如在某个场景下 有100个方法都要修改数据库的某一张表数据,且修改后都要有一个动作,就是想某一个系统发送一条消息。 传统的解决方案中,需要100个方法中都调用一个发送方法, 假如100个方法分散在10个系统中, 就至少要修改十次。 如果使用规则引擎+canal的组合就可以轻松解决这个问题。 当数据库表的数据发生insert update的时候,发送MQ到规则引擎系统, 规则引擎系统根据规则发送MQ到其他系统即可。 即使以后系统中加入了别的insert也不用再重复的写send方法了。

Drools的基本使用:

  • 代码工程结构
    在这里插入图片描述
  • maven引入包
    <dependencies>
        <dependency>
            <groupId>org.kie</groupId>
            <artifactId>kie-api</artifactId>
            <version>6.5.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-compiler</artifactId>
            <version>6.5.0.Final</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
  • 创建kmodule.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
    <kbase name="rules" packages="rules">
        <ksession name="myAgeSession"/>
    </kbase>
</kmodule>

  • 创建一个测试对象UserBean
package www.wpz.dome;

public class UserBean {

    public Integer age;

    public String name;

    public UserBean(String name, Integer age) {
        this.age = age;
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

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

}

  • 创建规则文件rule.drl
import www.wpz.dome.UserBean

dialect  "mvel"

rule "age"
    when
        $user : UserBean(age<10 || age>60)
    then
        System.out.println("这个年龄太小,还是不太够。");
end


rule "name"
    when
        $user : UserBean(name.equals("maozedong"))
    then
        System.out.println("这个是皇帝!");
end

  • 测试类代码:
import www.wpz.dome.UserBean;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

public class Test {

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

    @org.junit.Test
    public void test(){
        KieServices kieServices = KieServices.Factory.get();
        container = kieServices.getKieClasspathContainer();
        statefulKieSession = container.newKieSession("myAgeSession");
        UserBean user = new UserBean("maozedong",12);
        statefulKieSession.insert(user);
        statefulKieSession.fireAllRules();
        statefulKieSession.dispose();

    }
}

``

 - 其中的rule文件可以细拆一下:  target  规则文件、  filter  过滤文件、 send  触发文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注网赚的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值