SpringBoot2整合Drools规则引擎及案例详解

Spring Boot 2整合Drools规则引擎及案例详解可以分为以下几个步骤:

第一步:引入Drools依赖

pom.xml文件中引入Drools的依赖:

<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-core</artifactId>
    <version>7.57.0.Final</version>
</dependency>
<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-decisiontables</artifactId>
    <version>7.57.0.Final</version>
</dependency>
<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-compiler</artifactId>
    <version>7.57.0.Final</version>
</dependency>

第二步:创建Drools规则

src/main/resources目录下创建Drools规则文件,例如rules.drl,并编写规则:

package com.example.rules

//根据年龄设置优惠价格
rule "Age Discount"
dialect "java"
when
    $customer : Customer(age >= 60)
then
    //设置折扣
    $customer.setDiscount(0.9);
end

第三步:配置Drools引擎

创建Drools引擎的配置类DroolsConfig.java,并实现KieServicesSupplier接口:

@Configuration
public class DroolsConfig implements KieServicesSupplier {

    private final KieServices kieServices = KieServices.Factory.get();

    @Override
    public KieServices get() {
        return kieServices;
    }

    @Bean
    public KieContainer kieContainer() {
        KieFileSystem kfs = kieServices.newKieFileSystem();
        kfs.write(ResourceFactory.newClassPathResource("rules.drl"));
        KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();
        KieModule kieModule = kieBuilder.getKieModule();
        return kieServices.newKieContainer(kieModule.getReleaseId());
    }
}

第四步:创建业务类

创建Customer类,定义属性和settergetter方法:

public class Customer {

    private String name;
    private int age;
    private double discount;

    //省略其他方法和构造器

    public void setDiscount(double discount) {
        this.discount = discount;
    }

    public double getDiscount() {
        return discount;
    }
}

第五步:测试Drools规则引擎

@SpringBootTest
public class TestRule {

    @Autowired
    private KieContainer kieContainer;

    @Test
    public void testDiscount() {
        KieSession kieSession = kieContainer.newKieSession();
        Customer customer = new Customer("张三", 65);
        kieSession.insert(customer);
        kieSession.fireAllRules();
        System.out.println(customer.getDiscount()); //输出0.9
        kieSession.dispose();
    }
}

在测试方法中,通过kieContainer获取KieSession,然后将Customer对象插入KieSession中,最后执行所有规则并输出结果。

示例二:

第一步:引入Drools依赖

pom.xml文件中引入Drools的依赖(和示例一相同)。

第二步:创建Drools规则

src/main/resources目录下创建Drools规则文件,例如rules.drl,并编写规则:

package com.example.rules

import com.example.model.Order

//计算订单总额
rule "Calculate TotalAmount"
dialect "java"
when
    $order : Order(items != null, items.size() > 0)
then
    double totalAmount = $order.getItems().stream().mapToDouble(item -> item.getPrice() * item.getQuantity()).sum();
    $order.setTotalAmount(totalAmount);
end

第三步:配置Drools引擎

和示例一相同。

第四步:创建业务类

创建Order类和OrderItem类,定义属性和settergetter方法。

public class Order {

    private String orderId;
    private List<OrderItem> items;
    private double totalAmount;

    public void setTotalAmount(double totalAmount) {
        this.totalAmount = totalAmount;
    }

    public double getTotalAmount() {
        return totalAmount;
    }

    //省略其他方法和构造器
}

public class OrderItem {

    private String itemId;
    private String itemName;
    private double price;
    private int quantity;

    //省略其他方法和构造器

    public double getPrice() {
        return price;
    }

    public int getQuantity() {
        return quantity;
    }
}

第五步:测试Drools规则引擎

@SpringBootTest
public class TestRule {

    @Autowired
    private KieContainer kieContainer;

    @Test
    public void testCalculateTotalAmount() {
        KieSession kieSession = kieContainer.newKieSession();
        Order order = new Order("20190101", Arrays.asList(
                new OrderItem("001", "商品1", 100, 2),
                new OrderItem("002", "商品2", 50, 3)));
        kieSession.insert(order);
        kieSession.fireAllRules();
        System.out.println(order.getTotalAmount()); //输出400
        kieSession.dispose();
    }
}

同样,在测试方法中,通过kieContainer获取KieSession,然后将Order对象插入KieSession中,最后执行所有规则并输出结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot2整合Drools规则引擎及案例详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • java获取properties属性文件示例

    当我们需要在Java程序中读取properties属性文件时,通常可以使用java.util.Properties类来实现。下面是实现此操作的完整攻略: 1. 获取properties文件 首先需要获取到带有相关属性的properties文件,可以通过在项目中创建文件或者从外部导入文件的方式进行获取。假设我们已经有了一个示例属性文件”example.prop…

    Java 2023年5月19日
    00
  • 微信小程序支付功能完整流程记录(前端)

    微信小程序支付功能完整流程记录(前端) 一、准备工作 在开始前,你需要具备以下工具和信息: 微信公众平台的AppID、AppSecret和商户号(若未注册,需要前往微信公众平台进行注册) 微信支付开发文档 二、接入微信支付 1. 获取用户授权 由于小程序的支付需要获取用户的授权,因此我们需先引入小程序官方提供的授权组件。 <view> <b…

    Java 2023年5月23日
    00
  • 举例详解用Java实现web分页功能的方法

    我来详细讲解一下“举例详解用Java实现web分页功能的方法”的完整攻略。下面我将按照步骤一一说明,包含两条示例。 1. 在Java Web应用中实现分页 在Java Web应用中实现分页的基本思路是:查询需要分页的数据,然后根据页面大小和当前页码将数据切分成多个子集,最后将某个子集的数据展示在页面上。整个过程可以通过以下步骤实现: 1.1 定义分页查询参数…

    Java 2023年5月20日
    00
  • Java NegativeArraySizeException异常解决方案

    我将为您讲解解决“Java NegativeArraySizeException异常”的完整攻略。 什么是NegativeArraySizeException异常? 首先,我们需要了解一下NegativeArraySizeException异常。它是Java中的一种运行时异常,当我们使用负数作为数组大小时,就会抛出这个异常。 解决方案 要解决Negative…

    Java 2023年5月27日
    00
  • java音乐播放器实现代码

    下面我将详细讲解如何实现 Java 音乐播放器的代码。 1. 简介 Java 音乐播放器是一款基于 Java 编写的本地音乐播放器,可以帮助用户播放本地保存的音乐文件。实现 Java 音乐播放器的代码需要掌握 Java IO 、Swing 等相关知识,并且需要掌握音乐文件的播放过程。 2. 开始编写 2.1 导入依赖库 在实现 Java 音乐播放器的过程中,…

    Java 2023年5月19日
    00
  • Java持久层面试题目及答案整理

    Java持久层面试题目及答案整理 1. 什么是持久化? 持久化是指将内存中的数据存储到硬盘等外部介质中,使其具有持久性和长久性,可以随时被读取和使用。在Java中,持久化主要体现在数据的存储和读取,主要通过数据库来实现。 2. 什么是ORM? ORM全称Object Relational Mapping,指对象关系映射。ORM框架是将Java对象和关系数据库…

    Java 2023年6月16日
    00
  • 基于js实现投票的实例代码

    首先,基于js实现投票要考虑两个方面,其一是前端页面的实现,其二是后端接口的实现。 前端页面实现 前端页面主要包含页面布局和交互逻辑两个部分。 页面布局 可以使用HTML/CSS完成页面布局,页面布局可以按照个人需求自定义设计,以本次介绍的前端实现为例,可分为以下几个区域: 问题区:用于展示当前投票的问题 选项区:用于展示当前问题的选项内容 操作区:用于用户…

    Java 2023年6月15日
    00
  • 运行时数据区域包括哪些部分?

    以下是关于 Java 运行时数据区域的详细讲解: 运行时数据区域包括哪些部分? Java 的运行时数据区域是指 Java虚拟机(JVM)在运行 Java程序所使用的内存区域。Java 的运行时区域包括以下几个部分: 程序计数器(Program Counter Register):用于记录当前线程执行的字节令地址。 Java 虚拟机栈Java Virtual …

    Java 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部