分享好友 最新动态首页 最新动态分类 切换频道
Drools 规则引擎案例
2024-12-26 18:08

目前市面上比较热门的规则引擎有几款

  1. Ilog JRules 是最有名的商用BRMS
  2. Drools 是最活跃的开源规则引擎
  3. Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代表
  4. Visual Rules(旗正规则引擎)国内商业规则引擎品牌。

本文将着重介绍Drools。

一 为什么要使用规则引擎

有如下案例,充值得积分的案例 ,规则如下:

 

传统java业务实现如下

 

这时候由于市场需求变化,又要调整规则时候,则又要进行业务层面的代码修改、部署,十分麻烦。如果我们可以把决策规则从应用程序中分离出来,将对系统提供很大的便利

例如 下面业务变更

 
 

对系统的使用人员

  1. 把业务策略(规则)的创建、修改和维护的权利交给业务经理
  2. 提高业务灵活性
  3. 加强业务处理的透明度,业务规则可以被管理
  4. 减少对IT人员的依赖程度
  5. 避免将来升级的风险

对IT开发人员

  1. 简化系统架构,优化应用
  2. 提高系统的可维护性和维护成本
  3. 方便系统的整合
  4. 减少编写“硬代码”业务规则的成本和风险

二、什么是Drools

Drools 是一个基于Charles Forgy’s的RETE算法的,易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。

业务分析师人员或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。

Drools 是用Java语言编写的开放源码规则引擎,使用Rete算法对所编写的规则求值。Drools允许使用声明方式表达业务逻辑。可以使用非XML的本地语言编写规则,从而便于学习和理解。并且,还可以将Java代码直接嵌入到规则文件中,这令Drools的学习更加吸引人。

三、Drools 实战

下面我们将展示测试项目中使用drools的一个案例 数字匹配操作

  • 循环打印 1 到 50
  • 是 5 的倍數就印 five
  • 是 7 的倍數就印 seven
  • 同時是 5 和 7 的倍數就印 five and seven,
  • 否则打印数字本身

1、引入核心依赖jar包

 

2、定义controller层接口

 

3、定义rule规则

 

4、定义kmodule文件

 

5、启动项目 执行相关接口 [ 部分数据示例 ]

 

四、Drools规则属性

1、No-loop
作用:防止规则通过update之类的函数修改了Fact对象时,可能使规则再次被激活,从而导致死循环。
什么时候用
当被修改的事实对象与规则LHS部分的约束条件为包含关系时。例如

 

否则,设置了no-loop为true也会出现死循环,例如

 

2、lock-on-active
作用:no-loop的升级版,一个更强大的解决死循环的属性。当规则提设置该属性为True时,则当前只会被触发一次。无论如何更新规则事实对象,当前规则也只能被触发一次。
例如

 

3、salience
作用:如果不设置salience属性,规则体的执行顺序为由上到下,否者,salience值越大,执行顺序越高。
例如

 

4、enabled
作用:指规则是否可以被执行,若规则体设置为 enabled false,即将规则体视为永不激活。
例如

 

5、dialect
作用:用来定义规则中要使用的语言类型,支持Mvel和Java两种类型的语言,默认情况下由包指定。

6、date-effective
作用:只有当前系统时间大于等于设置的时间或者日期,规则才会被激活。
例如

 

7、date-expires
作用:与date-effective相反,只有当前系统时间小于设置的时间或者日期,规则才会被激活。

8、duration
作用:表示定时器,如果当前规则LHS部分为True,规则继续执行。如果该属性已经被弃用,那么通过新的属性timer来控制。

9、activation-group
作用:activation-group指激活分组,通过字符串定义分组名称,具有相同组名名称的规则体有且只有一个规则被激活,其他规则体的LHS部分仍然为true也不会被执行。该属性受salience属性的影响,如当前规则文件中的其他规则未设计该属性,则视为规则处于被激活状态,并不受该属性的影响。

 

10、agenda-group
作用:agenda-group是议程分组,属于另一种可控的规则执行方式,是指用户可以通过配置agenda-group的参数来控制规则的执行,而且只有获取焦点的规则才会被激活。
例如:ks.getAgenda().getAgendaGroup(“ag1”).setFocus()

 

如果有两个规则体的agenda-group属性相同,都可以被激活

11、auto-focus
作用:auto-focus 属性为自动获取焦点,即当前规则是否被激活,如果一个规则被执行,那么认为auto-focus为true;如果单独设置,一般结合agenda-group。当一个agenda-group没有获取焦点时,可以用auto-focus来控制。

12、timer
作用:用来控制规则的执行时间。
用法
①timer(int:30s) timer(int:30s 5m)
②timer(cron:0/1****?)
③timer(int:30s 10s; start=3-JAN-2018,end=5-JAN-2018
示例

 

项目地址

最新文章
【Lead百度网盘下载】HTC Lead百度网盘12.18.3免费下载
百度网盘是一款省心、好用的超级云存储产品,已为超过7亿用户提供云服务,空间超大,支持多类型文件的备份、分享、查看和处理,自建多个数据存储中心,更有两项国际安全认证ISO27001&ISO27018为用户数据安全提供护航,如果您想备份文件数
网站SEO优化之关键词布局步骤,从站长工具到实战应用
随着互联网的快速发展,网站优化已成为企业提升品牌影响力、获取潜在客户的关键手段。而在众多优化策略中,显得尤为重要。本文将结合站长工具,为您详细解析关键词布局策略,并探讨其实战应用。一、关键词布局的重要性1. 提高网站收录:合
电商江湖的“血滴子”之谜
血滴子为何物?古代暗器之一,但是如果你去淘宝、京东去搜索这个关键词,你会发现一个新大陆!淘宝、京东、拼多多上,电商平台中的成人用品展示,尺度已经大到你无法想象。这些含有成人用品的电商平台,在用户的注册上,也没有什么限制。他
美术的画板上色简笔画图片教程步骤
绘画,是指用笔、板刷、刀、墨、颜料等工具材料,在纸、纺织物、木板、墙壁等平面(二度空间)上塑造形象的艺术形式。那么美术的画板的简笔画要怎么画呢?小编今天教大家画美术的画板,步骤很简单,一起来学习吧!美术的画板简笔画步骤1美
通识课程丨科艺融合,培养新质创想力——《人工智能艺术应用》教学实践分享
编者按当今数智浪潮奔涌,为教育模式、教育形态重塑和创新发展带来新机遇。华东师范大学以“人的自由而全面发展”为核心,以“超学科、重思维、智能化”为策略,积极构建“少而精、博而通、超越单纯知识点传授,以思维训练为特色”的金字塔
伦敦大学学院可持续发展人工智能理学硕士研究生申请要求
p2015年9月,联合国可持续发展峰会在纽约总部召开,联合国193个成员国在峰会上正式通过17个可持续发展目标,旨在从2015年到2030年间以综合方式彻底解决社会、经济和环境三个维度的发展问题,例如消除饥饿、贫困,推进性别平等、教育公平,
百度快照的SEO意义,别再跟风了
使用adc功能来判断不同电压,那必定是通过电压的不同来区分的,这就需要按键与电阻进行组合,我设计打算使用正比关系的按键阻值,这样会比较好在程序判断,最后就如仿真图那样设计,按键按下让某部分电路短路,剩下的电路得到不同的电压值
阿里巴巴总部参观预约
阿里巴巴总部参观预约作为世界*大的电商平台,阿里巴巴公司的总部聚集了众多**的IT人才,同时也有着非常**的公司文化和管理模式。因此,很多人都想去参观一下阿里巴巴的总部,了解一下这个企业的内部情况。那么,如何进行阿里巴巴总部的参
springboot毕设基于微信小程序的家政服务平台管理端论文+程序+部署
本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。 随着移动互联网技术的飞速发展与普及,人们的生活方式和消费习惯正在发生深刻的变化。在现代社会快节奏的生活模式下,人
川崎摩托加盟
  川崎重工管理(上海)有限公司,知名摩托车品牌,日本川崎重工业株式会社旗下,拥有摩托车等运输机械和系统领域技术的高科技企业。川崎重工集团于1878年开始造船事业以来,在铁路车辆、飞机、以“KAWASAKI”品牌而闻名内外的摩托车等运
相关文章
推荐文章
发表评论
0评