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日

相关文章

  • Arthas排查Kubernetes中应用频繁挂掉重启异常

    以下是 Arthas 排查 Kubernetes 中应用频繁挂掉重启异常的完整攻略。 确认场景 首先,需要确认场景。用户反馈应用经常挂掉重启,需要排查问题。该应用运行在 Kubernetes 集群中。需要确定:是所有的节点都有相同的问题,还是只有某个节点有问题。同时,需要定位是否是应用级别的问题。 安装 Arthas 因为需要使用到 Arthas 工具,所以…

    Java 2023年5月20日
    00
  • spring+springmvc+mybatis 开发JAVA单体应用

    下面是关于“spring+springmvc+mybatis 开发JAVA单体应用”的完整攻略: 一、前置知识 在开始之前,需要掌握以下技术: Java基础知识; SQL语言基础; Spring框架基础知识; Spring MVC框架的基础知识; MyBatis框架基础。 如果你已经掌握了以上技术,那么你就可以继续阅读该攻略。 二、搭建环境 1. 安装JDK…

    Java 2023年6月1日
    00
  • 利用Java实现文件锁定功能

    接下来我将为你详细讲解如何利用Java实现文件锁定功能。 什么是文件锁定 文件锁定是指在对文件进行读取、修改等操作时,防止其他程序或者线程对同一文件进行操作,从而避免文件被多个程序同步修改而产生数据不一致的情况。 文件锁定的实现原理 文件锁定的实现原理是通过创建文件锁的方式来阻止其他程序访问被锁定的文件。在Java中,可以通过FileChannel类创建文件…

    Java 2023年5月20日
    00
  • JS 对java返回的json格式的数据处理方法

    当我们在使用 JavaScript 时,需要对从后端返回的 JSON 格式的数据进行处理。下面是处理 JSON 数据的几种方法和示例说明: 1. 使用 XMLHttpRequest 对象发送 Ajax 请求 使用 XMLHttpRequest,可以向后端发送 XMLHttpRequest 请求获取数据。若要获取 JSON 格式数据,可以使用 XMLHttpR…

    Java 2023年5月26日
    00
  • Spring MVC中@Controller和@RequestMapping注解使用

    在Spring MVC中,@Controller和@RequestMapping是两个重要的注解,它们用于定义控制器和请求映射。本文将详细介绍@Controller和@RequestMapping注解的使用方法,并提供两个示例来说明这些方法的使用。 @Controller注解 @Controller注解用于定义控制器类。在Spring MVC中,控制器类负责…

    Java 2023年5月17日
    00
  • SpringBoot 防御 CSRF 攻击的流程及原理解析

    下面是关于SpringBoot防御CSRF攻击的流程及原理解析的完整攻略。 什么是CSRF攻击? CSRF(Cross-site request forgery)攻击,中文名为跨站请求伪造攻击,指的是攻击者通过操纵用户在当前登录的网站发起一些未经授权的操作,例如在用户未登出的情况下转账等操作。攻击者通常在第三方网站发布伪造的请求链接,然后引诱用户在当前浏览器…

    Java 2023年5月20日
    00
  • Java 实战范例之精美网上音乐平台的实现

    Java 实战范例之精美网上音乐平台的实现攻略 1. 概述 本文将介绍如何使用Java技术实现一个精美的网上音乐平台。本平台能够提供音乐播放、收藏喜欢的歌曲、搜索歌曲等功能。 2. 技术选项 本平台的后端通过Spring Boot实现,前端使用JavaScript和jQuery框架。平台使用MySQL作为数据库存储。同时,我们还使用了第三方API接口Spot…

    Java 2023年5月19日
    00
  • Java设计模块系列之书店管理系统单机版(二)

    我来详细讲解一下“Java设计模块系列之书店管理系统单机版(二)”的完整攻略。 首先,这篇攻略是一篇关于书店管理系统的设计,主要包括从需求分析到具体实现的全过程。在设计的过程中,作者使用了MVC模式,分为Model、View和Controller三个部分,实现了对数据的管理。同时,作者还介绍了一些设计模式的应用,如装饰器模式、工厂模式和适配器模式等。 接着,…

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