Drools规则引擎

借鉴:基于JAVA的功能强大的开源规则引擎-Drools业务管理系统实战视频教程_哔哩哔哩_bilibili  1、什么是规则引擎? 规则引擎,全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模板编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。 需要注意的的规则引擎并不是一个具体的技术框架,而是指的一类系统,即业务规则管理系统。目前市面上具体的规则引擎产品有:drools、VisualRules、iLog等。 规则引擎实现了将业务决策从应用程序代码中分离出来,接收数据输入,解释业务规则,并根据业务规则做出业务决策。规则引擎其实就是一个输入输出平台。 2、Drools介绍 drools是一款由JBoss组织提供的基于java语言开发的开源规则引擎,可以将复杂且多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件或特定的存储介质中(如存放在数据库中),使得业务规则的变更不需要修改项目代码、重启服务器就可以在线上环境立即生效。 drools官网:https://www.drools.org/ drools中文网:Drools中文网 | 基于java的功能强大的开源规则引擎 drools源码下载地址:https://github.com/kiegroup/drools 在项目中使用drools时,既可以单独使用也可以整合spring使用。如果单独使用只需导入如下maven坐标即可:

   3、Drools入门案例 1、业务场景说明 业务场景:消费者在图书商城购买图书,下单后需要在支付页面显示订单优惠后的价格。具体优惠规则如下: 现在需要根据上面的规则计算优惠后的价格。  2、开发实现 第一步:创建maven工程并导入drools相关maven坐标

  第二部:根据drools要求创建resources/META-INF/kmodule.xml

  注意:上面配置文件的名字和位置都是固定写法,不能更改。 第三步:创建实体类Order

  第四步:创建规则文件resources/rules/bookDiscount.drl

  第五步:编写单元测试

  控制台输出如下: 通过上面的入门案例可以发现,使用drools引擎规则主要工作就是编写规则文件,在规则文件中定义和业务相关的业务规则,例如本案例定义的就是图书的优惠规则。规则定义好后就需要调用drools提供的api将数据提供给规则引擎进行规则模式匹配,规则引擎会执行匹配成功的规则,并将计算的结果返回。 可能大家会有疑问,虽然没有在代码中编写规则的判断逻辑,但是还是在规则文件中编写了业务规则,这跟在代码中编写规则有什么本质的区别? 前面已经提到,使用规则引擎时,规则可以做到动态管理。业务人员可以像管理数据一样对业务规则进行管理,比如查询、添加、更新、统计、提交业务规则等。这样就可以做到在不重启服务的情况下调整业务规则。 4、小结 1、规则引擎构成 drools规则引擎由以下三部分构成: Working Memory(工作内存) Rule Base(规则库) Inference Engine(推理引擎) 其中Inference Engine(推理引擎)又包括: Pattern Matcher(匹配器) Agenda(议程) Execution Engine(执行引擎) 如下图所示: 2、相关概念说明 Working Memory:工作内存,drools规则引擎会从Working Memory中获取数据并和规则文件中定义的规则进行模式匹配,所以我们开发的应用程序只需要将我们的数据插入到Working Memory中即可,例如本案例中我们调用kieSession.insert(order);就是将order对象插入到工作内存中。 Fact:事实,是指在drools规则应用当中,将一个普通的javaBean插入到Working Memory后的对象就是Fact对象,例如本案例中的Order对象就属于Fact对象。Fact对象是我们的应用和规则引擎进行交互的桥梁或通道。 Rule Base:规则库,我们在规则文件中定义的规则都会被加载到规则库中。 Pattern Matcher:匹配器,将Rule Base中的所有规则与Working Memory中的Fact对象进行模式匹配,匹配成功则被激活并放入Agenda中。 Agenda:议程,用于存放通过匹配器进行模式匹配后被激活的规则。 Execution Engine:执行引擎,执行Agenda中被激活的规则。 3、KIE介绍 我们在操作Drools时经常使用的API以及他们之间的关系如下图: 通过上面的API可以发现,大部分类都是以Kie开头。Kie全称为Knowledge is Everything,即“只是就是一切”的缩写,是Jboss一系列项目的总称。如下图所示,Kie的主要模块有OptaPlanner、Drools、UberFire、jBPM。 通过上图可以看到,Drools是整个KIE项目中的一个组件,Drools中还包括一个Drools-WB的模块,他是一个可视化的规则编辑器。  5、Drools基础语法 1、规则文件构成 在使用Drools时非常重要的一个工作就是编写规则文件,通常规则文件的后缀为.drl。 drl是Drools Rule Language的缩写。在规则文件中编写具体的规则内容。 […]

龙生   10 May 2023
View Details

ASP.NETCore实现文件上传和下载

本文实例为大家分享了ASP.NET Core实现文件上传和下载的具体代码,供大家参考,具体内容如下 一、文件上传 1.1 获取文件后缀

1.2 上传单文件

1.3 上传多文件

二、文件下载 2.1 获取ContentType属性

2.2 执行下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。   from:http://news.558idc.com/448616.html

龙生   26 Apr 2023
View Details

.net webapi 返回需要的字段,忽略某些字段,修改字段名等

有时候我们在写webapi的时候,不想把正常用的对象所有字段都返回,我们需要进行一些筛选,忽略某些字段,大概说一下几种方法

方法一:给不同需求单独写查询,提供不同的数据对象

单独写一个model,然后单独写一个查询,在通过接口提供出去

这种方法效率比较高,不需要单独解析一下,就是代码量多一点,适用于变化不大的情况。

当然也可能是这个接口是需要依赖与另外一个接口返回的数据,道理是一样,就是对数据源加工后进去返回,至于数据源是数据库还是缓存还是其他接口提供的数据不影响我们数据加工几种方法的使用

方法二:使用对象映射

单独写一个model,把原有model赋值到另外的对象,使用automapper或者自己通过反射映射一下对象即可 这样写法要通过反射转化一遍,效率会慢一点,但是可以共用一个查询方法。

想要修改字段名可以自己弄一个映射关系,用特性或者动态映射都可以,automapper映射一个名字还是比较方便的

方法三:通过Newtonsoft.Json在model中配置忽略某些值即可

通过JsonIgnore特性配置即可。

龙生   26 Apr 2023
View Details

RabbitMQ基本实践

声明:本文是《RabbitMQ实战指南》(朱忠华 著)学习笔记,仅供本人学习研究之用,如若喜欢请购买正版书籍。如有侵权,请联系删除。

龙生   26 Apr 2023
View Details

如何优雅的处理异常 | 京东云技术团队

Java 语言按照错误严重性,从 throwale 根类衍生出 Error 和 Exception 两大派系。

Error(错误):

程序在执行过程中所遇到的硬件或操作系统的错误。错误对程序而言是致命的,将导致程序无法运行。常见的错误有内存溢出,jvm 虚拟机自身的非正常运行,calss 文件没有主方法。程序本生是不能处理错误的,只能依靠外界干预。Error 是系统内部的错误,由 jvm 抛出,交给系统来处理。

Exception(异常):

程序正常运行中,可以预料的意外情况。比如数据库连接中断,空指针,数组下标越界。异常出现可以导致程序非正常终止,也可以预先检测,被捕获处理掉,使程序继续运行。Exception(异常)按照性质,又分为编译异常(受检异常)和运行时异常(非受检异常)。

◦ 编译异常:

又叫可检查异常,通常时由语法错和环境因素(外部资源)造成的异常。比如输入输出异常 IOException,数据库操作 SQLException。其特点是,Java 语言强制要求捕获和处理所有非运行时异常。通过行为规范,强化程序的健壮性和安全性。

◦ 运行时异常:

又叫不检查异常 RuntimeException,这些异常一般是由程序逻辑错误引起的,即语义错。比如算术异常,空指针异常 NullPointerException,下标越界 IndexOutOfBoundsException。运行时异常应该在程序测试期间被暴露出来,由程序员去调试,而避免捕获。

龙生   26 Apr 2023
View Details

C#如何使用NPOI设置Excel下拉选项

这篇文章给大家分享的是有关C#如何使用NPOI设置Excel下拉选项的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 第一种 · 直接设置下拉值,不超过255个字符(优点:逻辑简单 ;缺点:有字符限制) · 适用于下拉值为固定值,例如:状态、性别等 方法块:

调用:

  第二种 · 通过绑定值到sheet中设置下拉 · 适用于数据较多,或灵活控制的值,例如:城市区域、数据表信息等。 方法块:

调用:

  另外,延伸联动下拉(直接贴源码了) 方法块:

调用:

  from:https://www.yisu.com/zixun/688759.html

龙生   25 Apr 2023
View Details

C# NPOI XSSFWorkbook 添加下拉框

1、添加下拉框,并开启列值校验

2、调用方

  from:https://blog.csdn.net/a304954732/article/details/127220912

龙生   25 Apr 2023
View Details

C# 使用NPOI导出Excel,首行冻结,添加筛选,填充颜色,列宽自适应

使用NuGet安装NPOI,添加以下命名空间

  添加类 ExcelExporter

使用时传入文件路径,即可将DataTable导出到指定位置。 如要导出集合类数据IEnumerable<T>,使用反射转成DataTable即可。方法大同小异,这里就不写了   from:https://www.qyyshop.com/info/813140.html

龙生   25 Apr 2023
View Details

NPOI自适应列宽

当本地没有安装Excel,但是又想导出Excel,采用Office插件是行不通的,NPOI是导出Excel的一个开源的插件。在导出Excel后,为了方便阅读,可以才采用自适应列宽的方式使得单元格的宽度和文本的宽度接近。NPOI中工作簿ISheet有自适应列宽的方法,但是其效果列宽还是比单元中文字的宽度稍微大一点。此时我们可以自己计算其宽度,自定义列宽。一下这种方式是支持中英文以及数字的。

龙生   25 Apr 2023
View Details

C#使用NPOI设置Excel单元格背景颜色(xls,xlsx)

每次用到这个都要去百度,这里记录一下,xls和xlsx两种格式设置背景颜色的区别,这里省略了前面读取模板或者创建excel的过程: xls:

  xlsx:

  from:https://blog.csdn.net/qq_34452824/article/details/119379559

龙生   25 Apr 2023
View Details
1 41 42 43 410