📜  Drools-创建Drools程序(1)

📅  最后修改于: 2023-12-03 15:00:32.280000             🧑  作者: Mango

Drools-创建Drools程序

介绍

Drools是一种由Jboss开发的基于Java的规则引擎。Drools可以让程序员轻松地实现业务规则的管理和执行,同时提高了应用程序的可维护性、灵活性和可扩展性。

本文将介绍如何使用Drools创建一个简单的规则引擎程序。

步骤
步骤一:创建Maven项目

首先,我们需要创建一个Maven项目。在你的IDE中创建一个新的Maven项目,并添加以下依赖项到pom.xml文件中:

<depencencies>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-core</artifactId>
        <version>6.2.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
        <version>6.2.0.Final</version>
    </dependency>
</dependencies>
步骤二:定义规则

在Drools中,规则由“当-就”语句组成。当条件满足时,就执行相关的操作。

让我们创建一个简单的规则,根据用户的年龄来验证他们是否可以购买酒精饮料。如果年龄大于或等于18岁,则可以购买,否则不可以。

src/main/resources文件夹下创建一个名为rules.drl的文件,输入以下代码片段:

package com.example.rules

import com.example.model.User;

rule "Alcohol Restriction"
    when
        $user: User(age > 18)
    then
        System.out.println($user.getName() + " is allowed to buy alcohols");
end
步骤三:定义模型

在我们的规则中,我们使用了一个名为User的模型来存储用户信息。让我们创建一个Java类来表示这个模型。

src/main/java文件夹下创建一个名为User.java的文件,输入以下代码片段:

package com.example.model;

public class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}
步骤四:编写程序

现在,我们已经定义了规则和模型,接下来就是把它们组合起来并编写Drools程序。

src/main/java文件夹下创建一个名为DroolsExample.java的文件,输入以下代码片段:

package com.example;

import com.example.model.User;
import org.drools.compiler.kie.builder.impl.KieServicesImpl;
import org.drools.compiler.kie.builder.impl.KieFileSystemImpl;
import org.drools.compiler.kie.builder.impl.KieRepositoryImpl;
import org.drools.compiler.kie.builder.impl.KieServicesImpl;
import org.drools.compiler.kie.builder.impl.KieFileSystemImpl;
import org.drools.compiler.kie.builder.impl.KieBuilderImpl;
import org.drools.compiler.kie.builder.impl.KieContainerImpl;
import org.drools.compiler.kie.builder.impl.KieModuleImpl;
import org.drools.compiler.kie.builder.impl.KieRepositoryImpl;
import org.kie.api.KieServices;
import org.kie.api.builder.*;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

public class DroolsExample {

    public static void main(String[] args) {
        //定义一个用户
        User user = new User("John", 20);

        // 开始构建Drools知识库
        KieServices kieServices = new KieServicesImpl();
        KieFileSystem kfs = kieServices.newKieFileSystem();

        // 定义一个Maven模块,并添加规则定义到知识库中
        KieModule kieModule = KieServices.Factory.get().getRepository().getDefaultReleaseId().getKieModuleForClassLoader();
        KieRepository kieRepository = kieServices.getRepository();
        ReleaseId releaseId = kieRepository.getDefaultReleaseId();
        kfs.write("src/main/resources/rules.drl", kieServices.getResources().newInputStreamResource(DroolsExample.class.getResourceAsStream("/rules.drl")));
        kfs.writeKModuleXML(kieServices.getResources().newInputStreamResource(DroolsExample.class.getResourceAsStream("/default-kmodule.xml")));
        kieServices.newKieBuilder(kfs).buildAll();

        // 生成Drools容器,然后获取KSession
        KieContainer kieContainer = kieServices.newKieContainer(releaseId);
        KieSession kSession = kieContainer.newKieSession();

        // 插入数据并触发规则引擎
        kSession.insert(user);
        kSession.fireAllRules();

        // 关闭会话
        kSession.dispose();
    }
}
步骤五:运行程序

最后一步就是运行程序!在运行之前,确保你已经在IDE或命令行中安装了Maven,并且你已经在项目的根目录下运行了mvn clean package

在你的IDE或命令行下,执行以下命令启动程序:

java -jar target/drools-example-1.0-SNAPSHOT.jar

如果一切正常,你应该会看到控制台输出以下内容:

John is allowed to buy alcohols

至此,你已经成功地使用Drools创建了一个简单的规则引擎程序!

结论

Drools是一种很好的规则引擎,可以帮助我们轻松地实现业务规则的管理和执行。本文介绍了如何使用Drools创建一个简单的规则引擎程序,任何程序员都可以按照这个步骤来创建他们自己的规则引擎程序。