drools学习

article/2025/10/1 10:06:42

drools使用和设置

  • 1.概述
    • 举个例子
  • 2.结合maven引入
      • 1.引入maven
      • 2.创建kmoudule.xml文件
      • 3如有需要,安装drools的插件
      • 4编写drl规则文件
      • 5准备用于测试的po类
      • 6编写drools的java接口
  • 3.基本规则
  • 4.组合语法

1.概述

drools是一个规则引擎,什么是规则引擎?就是能够自动将决策树转化为基本规则.这样的好处就是把决策规则从代码中摘出来,形成单独的规则文件.这样的好处有三个:
1.规则文件单独成册,可以编著多个规则文件进行归档管理,具有历史记忆的功能
2.规则文件可以支持修改,而不影响代码的结构,使得规则和代码解耦
3.规则文件可以被持久化,通过解析和破解

举个例子

当我们有一个业务逻辑,比如说是价格砍价行为
满100打8折
满200打7折
满300打6折
满400打5折
组合购物超过500送20优惠券

大概就是你在淘宝上看到的复杂的规则.那么针对这些问题,我们常规的做法是使用代码来实现,通过java将其嵌入到业务逻辑中,那么代码应该是这样:

		double price=0;double zhekou=0,youhui=0;if(price>100&&price<200){price=price*(1-zhekou);}else if(price>200&&price<300){price=price*(1-zhekou);}else if(price>100&&price<200){price=price*(1-zhekou);}...

那么像这种逻辑,我们就不说他丑了,他存在的最大的问题有两个:
1.当打折力度变化时需要深入到代码中,定位到具体的行来进行参数修改
2.但凡规则变了,就要整体修改业务逻辑的代码,比如加入了一个新的优惠规则
为了解决这样的问题,drools发挥了很好的作用,他的效果大概是这样的图示:
可切换的规则
drools用这种方式,能够实现不更改业务逻辑的前提下,主动切换规则.
接下来本文就进行实践,说明drools如何引入maven和spirngboot中

2.结合maven引入

1.引入maven

首先需要在maven中引入drools的依赖,drools要引入的依赖有几个,分别是drools-compiler,drools-bom,kie-api.引入的pom大概长这样:

<dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.29.0.Final</version></dependency><!-- https://mvnrepository.com/artifact/org.kie/kie-api --><dependency><groupId>org.kie</groupId><artifactId>kie-api</artifactId><version>7.29.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-bom</artifactId><type>pom</type><version>7.69.0.Final</version><scope>import</scope></dependency>

需要注意drools的版本和各个插件之间的依赖版本的关系.
在引入drools的组件后,就能在spirng项目中进行测试了.
首先在Resources文件夹下建立META-INF文件件和rules文件夹

2.创建kmoudule.xml文件

在META-INF文件夹下建立kmodule.xml文件,输入以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule"><kbase name="personal" packages="rules"><ksession name="PersonalRulePackage" /></kbase>
</kmodule>

对上述参数做简要说明,其中kbase name是容器的参数,ksession name是会话的参数,这两个参数在后续编写drools的规则控制的时候需要用到.
然后在rules文件夹下面建立一个drl文件,这个文件就是drools的主体的规则文件.
对于idea没有drl插件的问题,要在插件管理中心安装drools插件.但是我在安装的时候,查检中心并没有这个插件.我的方式是手动去idea的仓库,下载drools的插件,然后通过本地磁盘安装的方式,实现对drools插件的安装.

3如有需要,安装drools的插件

在这里插入图片描述

4编写drl规则文件

在安装好以后,就能比较好的支持drl文件的编写了.下面首先写一个简单的drl文件,类似于drools领域的hello world

import com.entity.Persondialect  "mvel"
rule "test_01"
when$p:Person($x:age>10)
thenSystem.out.println("加上80");
end

5准备用于测试的po类

现在对上述的规则进行说明,其中 的person是我自己写的测试类,下面是person的数据结构:

public class Person {String name;int age;String sex;}

这个规则实现的是当person的age>10的时候,输出一句话.

6编写drools的java接口

下面要做的就是编写java的drools容器接口,来实现对容器的部署\会话的建立,规则的逻辑
下面是基本代码:

public static void main(String[] args) {KieServices kieServices = KieServices.Factory.get();KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();KieSession kieSession = kieClasspathContainer.newKieSession("PersonalRulePackage");Person zhangsan = new Person("zhangsan", 90);kieSession.insert(zhangsan);kieSession.fireAllRules();}

上述逻辑是初始化一个drools容器,然后创建一个会话,然后将po对象加入到规则中,进行说明,程序运行的输出为下图:
在这里插入图片描述
以上就完成了一个基本的drools规则使用.

3.基本规则

4.组合语法


http://chatgpt.dhexx.cn/article/T8CwwGxS.shtml

相关文章

drools详解

1、基本的概念 请参考这个链接&#xff0c;差不多的语法感觉都介绍了 drools-api的基本语法链接 2、如何将drl文件配置在数据库中&#xff0c;实现动态加载&#xff1a; package com.neo.drools;import com.neo.drools.model.Message; import org.kie.api.io.ResourceType; i…

Drools基本介绍,入门案例,基本语法

目录 经典需求与场景 需求 传统做法-if 传统做法-策略 问题&#xff1f; 规则引擎 概念 起源 原理--基于 rete 算法的规则引擎 规则引擎应用场景 Drools 介绍 消费赠送积分案例 第一步&#xff1a; 创建工程&#xff0c;引入jar 创建 drools 自动配置类 订单实体…

Drools 简介

序 现实生活中&#xff0c;规则无处不在。对于某些企业级应用&#xff0c;诸如欺诈检测软件&#xff0c;购物车&#xff0c;活动监视器&#xff0c;信用和保密应用之类的系统&#xff0c;经常会有大量的、错综复杂的业务规则配置&#xff0c;而且随着企业管理者的决策变化&…

drools 介绍

1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 ...... 1.2传统做法 1.2.1 if...else if (order.getAmout() < 100){ order.setScore(0); addScore(order); }else if(order.getAmo…

计组——定点数原码反码补码移码以及它们之间的转换

原码 用尾数表示真值的绝对值&#xff0c;符号位“0/1”对应“正/负” 若机器字长n1位&#xff0c;原码整数的表示范围&#xff1a; − ( 2 n − 1 ) ≤ x ≤ 2 n − 1 {\color{Red} -(2^{n}-1)\leq x\leq 2^{n}-1} −(2n−1)≤x≤2n−1&#xff08;关于原点对称&#xff09;…

数据的表示:原码、反码、补码、移码以及浮点数的运算

前言 复习到数据表示方面相关的知识&#xff0c;所以在这里做一下记录&#xff0c;也方便大家参考。 什么是 R 进制 对于 R 机制&#xff0c;如果要实现与十进制的转换&#xff0c;则使用 按权展开法&#xff0c;其具体操作为&#xff1a; 将 R 进制数的每一位数值用 R k R…

五分钟理解原码补码反码和移码

这是计算机的基本知识了&#xff0c;一定要好好学。哈哈废话不多说&#xff0c;直接进入正题吧。计算机中有无符号数和有符号数两大类。 有符号数就是正负数&#xff0c;在计算机中正好用0和1分别去代表正和负。(ps:好多人不理解机器数和真值&#xff0c;机器数就是把符号数字…

原码、反码、补码、移码的表示

若字长n为8时&#xff0c;那么45的二进制表示0 0101101 &#xff0c;若数值X 1.原码 [X]原&#xff0c;在二进制数值中&#xff0c;正数保持不变&#xff0c;负数符号位置1. 2.反码 [X]反&#xff0c;的正数保持不变 &#xff0c; 负数对数值的绝对值每一位按位求反 3.补码…

关于补码移码各自和原码的联系、来历、功能及I EEE754标准中移码范围问题

最近在学习计算机组成原理时,遇到一些问题,记录在此。 如果你对下面这段话有疑惑或者兴趣&#xff0c;我或许能说点什么你感兴趣的。 真值-128的补码&#xff1a;1000 0000&#xff0c;这个补码本身表示的二进制数&#xff08;无符号&#xff09;是128&#xff0c;其对应着真…

移码的计算方式

规则&#xff1a;对应真值的补码的符号位取反&#xff1b; 计算公式&#xff1a; 式中&#xff1a;x为真值&#xff0c;n为整数的位数&#xff1b; 形式上补码是先减后增的&#xff0c;移码是递增的&#xff1b;根据人类的习惯&#xff0c;移码可以清楚的反映对应真值的大小…

计算机组成原理学习笔记:定点数、浮点数、原码、反码、补码、移码

定点数与浮点数 所谓定点数就是指小数点的位置固定不变而浮点数是小数点的位置是不固定的&#xff0c;会浮动 1 ) 定点数 用熟悉的十进制数来类比&#xff0c;定点数就是我们平时更习惯使用的常规的计数方式&#xff0c;我们会显式的标明小数点的位置Eg: 110.12 2 &#xf…

原码,补码,移码

一、原码 ①最高位为符号位&#xff0c;0表示正数&#xff0c;1表示负数&#xff1b; ②除符号位其它数值部分&#xff0c;就是数值本身绝对值的二进制数&#xff1b; ③负数的原码是在其绝对值得的基础上&#xff0c;符号位变为1&#xff1b; 但是&#xff1a; 0的表示不唯一&…

移码补码原理

计算机中的“数”&#xff0c;花样很多&#xff0c;又是ASCII码、又是BCD码等等&#xff0c;下面&#xff0c;做而论道写了一些关于移码、补码的一些看法&#xff0c;欢迎拍砖。 机器数 计算机中的“数”&#xff0c;其实都不是数字&#xff0c;它们都是一些高、低电平。其中&a…

浮点数与移码

浮点数的组成和计数原理 浮点数是什么浮点数的表示与规定浮点数的规定&#xff08;IEEE754 标准&#xff09;浮点数的表示范围&#xff08;IEE7标准瞎&#xff09;阶码用移码表示 浮点数是什么 浮点数就是小数点可以任意浮动的数字。   因为在计算机的机器语言中&#xff0c;…

图神经网络时代的深度聚类

©PaperWeekly 原创 作者&#xff5c;纪厚业 学校&#xff5c;北京邮电大学博士生 研究方向&#xff5c;图神经网络和推荐系统 聚类作为经典的无监督学习算法在数据挖掘/机器学习的发展历史中留下了不可磨灭的印记。其中&#xff0c;经典的聚类算法 K-Means 也被选为数据挖…

聊聊测试工程师的核心能力模型

这是鼎叔的第二篇原创文章。 行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。 多年大厂技术总监和质量通道委员经验&#xff0c;横跨多个不同领域&#xff0c;微信公众号“敏捷测试转型”&#xff0c;欢迎多多交流。 鼎叔过往接触过各个团队的测试&#xff08;测试开发&…

对比学习有多火?文本聚类都被刷爆了…

文 | 花小花Posy 大家好&#xff0c;我是小花。 对比学习的大火???? 越来越旺了&#xff0c;已然从CV蔓延到NLP了。今天给大家介绍的正是一篇将对比学习应用到文本聚类上的工作&#xff0c;NAACL21新鲜出炉的paper——《Supporting Clustering with Contrastive Learning》…

(附源码)小程序 记账微信小程序 毕业设计 180815

记账微信小程序 摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;记账微信小程序被用户普遍使用&#xff0…

使用Python+OpenCV+Tensorflow实现图像聚类

介绍 大家好&#xff0c;最近在参加深度学习竞赛时&#xff0c;遇到了一个有趣的问题&#xff0c;即如何将给定的图像集进行聚类&#xff0c;你可能会说&#xff0c;这不是一个简单的分类问题吗&#xff1f;使用卷积神经网络&#xff0c; 就实现&#xff0c;但关键在于没有合适…

论文阅读笔记(15):Deep Subspace Clustering with Data Augmentation,深度子空间聚类+数据增强

论文阅读笔记&#xff08;15&#xff09;&#xff1a;Deep Subspace Clustering with Data Augmentation&#xff0c;深度子空间聚类数据增强 摘要1 介绍2 相关工作带增强的聚类方法具有一致性损失的自监督子空间聚类中的自表达模型 3 深度子空间聚类数据增强总结 4 寻找有效增…