drools规则引擎入门指南(代码片段)

zhixiang-org-cn zhixiang-org-cn     2023-02-02     719

关键词:

本篇博客主要讲解Drools常用的属性以及函数

属性

首先我们在resources ules文件夹下创建一个Property.drl,还有一个DroolsApplicationPropertyTests

1. salience优先级

salience 属性的值默认为0,它的值越大执行的优先级就越高,看如下代码在执行的时候就会先执行salience2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 rule "salience2"
salience 2
when
eval(true)
then
System.err.println("salience2");
end

rule "salience1"
salience 1
when
eval(true)
then
System.err.println("salience1");
end
1
2
3
4
@Test
public void testSalience()
kieSession.fireAllRules();

2. date-effective日期比较(小于等于)

当系统时间小于等于date-effective的值是才会执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
 rule "dateEffective"
date-effective "2018-11-24"
when
then
System.err.println("2018-11-24被执行");
end

rule "dateEffectiveTomorrow"
date-effective "2018-11-25"
when
then
System.err.println("2018-11-25被执行");
end
1
2
3
4
5
6
7
8
9
@Test
public void testDateEffective()
kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("dateEffective"));


@Test
public void testDateEffectiveTomorrow()
kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("dateEffectiveTomorrow"));

由于今天是11月24,所以上方的dateEffectiveTomorrow将不会执行。

还有需要注意的是Drools默认的时间格式是dd-MMM-yyyy的,也就是说你必须使用24-十一月-2018它才能识别,我为什么能使用yyyy-MM-dd呢,请参考上篇文章中进行自动配置时的getKieServices()方法

3. date-expires日期比较(大于)

刚好于date–effective相反

4. enabled

当一个规则的enabled属性变为false时这条规则将不再可用

1
2
3
4
5
6
rule "enabled"
enabled false
when
then
System.err.println("被禁用的规则");
end
1
2
3
4
@Test
public void testEnabled()
kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("enabled"));

函数

接着我们在resources ules文件夹下创建一个Function.drl,还有一个DroolsApplicationFunctionTests

Drools中常用函数分别为insert、update和retract,分别是插入更新和删除,我们来看一下下方的几个规则的执行过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
rule "test1"
when

then
insert(new User("赵六",12));
System.err.println("创造赵六");
end

rule "test2"
when
$u:User(name=="赵六")
then
$u.setName("王五");
update($u);
System.err.println("赵六");
end

rule "test3"
when
$u:User(name=="王五")
then
System.err.println("王五");
retract($u);
end

rule "test4"
when
$u:User(name=="王五")
then
System.err.println("王五删除删除之后"+$u.getName());
end

可用看的,test1规则没有判断条件,所以直接被执行,执行过程中它生成了一个对象插入到工作内存中,此对象的规则又恰好与test2规则匹配,所以紧接着test2执行,test2执行时更新了user对象,更新后的对象又匹配了test3,所以test3继续执行。执行完毕后user对象被删除,test4就执行不了了。

另外还有几个方法也是常用的:

  1. getWorkingMemory,获取当前的WorkingMemory对象
  2. halt,执行完当前规则后不再执行其他规则
  3. getRule,获取当前规则对象

本文所有源码:https://github.com/shiyujun/drools

本文出自http://zhixiang.org.cn/,转载请保留





































































































































































java规则引擎drools急速入门

文章目录​​1.Drools规则引擎简介​​​​2.DroolsAPI开发步骤​​​​3.SpringBoot整合Drools案例​​​​4.Drools基础语法​​​​5.Drools条件语法部分​​​​6.Drools结果操作部分​​​​7.Drools内置属性部分​​​​8.Drools高级语法... 查看详情

规则引擎drools介绍使用及springboot整合drools(代码片段)

规则引擎Drools介绍、使用及SpringBoot整合Drools一、Drools介绍1.1优点1.2架构1.2.1Drools引擎的核心组件1.2.2规则引擎工作流程简述1.3Drools语法1.3.1规则文件1.3.1.1.规则详情1.属性详情2.条件部分-LHS3.结果部分-RHS1.3.1.2Drools关键词1.3.1.3Drools... 查看详情

drools7hellowrold入门详细步骤--系列01课(代码片段)

一、什么叫规则引擎?规则---》写在文档上引擎---》在java代码上,引用这个文档上的规则二、drools规则引擎有什么用?简单来说就是将多变的规则,从业务代码中剥离出来(当规则变了之后,不用修改代码,而是修改一份文本... 查看详情

drools规则引擎环境搭建(代码片段)

一、关于drools规则引擎前面写过一篇Drools规则引擎相关的文章,这篇文章主要记录一下规则引擎的环境搭建和简单示例。不熟悉drools的朋友可以看看这篇文章:自己写个Drools文件语法检查工具——栈的应用之编译器检测语法错误... 查看详情

规则引擎drools的使用(代码片段)

引入maven<dependency><groupId>org.drools</groupId><artifactId>drools-templates</artifactId><version>7.14.0.Final</version></dependency><dependency>& 查看详情

35activiti整合规则引擎drools(代码片段)

喜欢关注公众号:java乐园日常生活是由规则驱动的。红灯停绿灯行,这是我们的交通规则;我们站着往上跳,最终还是要落下来,这是地球的引力规则。规则在生活中无处不在。软件开发中我们也需要规则,满足什么规则应该... 查看详情

规则引擎drools示例:个人所得税计算器信用卡申请保险产品准入规则(代码片段)

...一、Drools实战1.1个人所得税计算器1.1.1名词解释1.1.2计算规则1.1.3实现步骤1.2信用卡申请1.2.1计算规则1.2.2实现步骤1.3保险产品准入规则1.3.1决策表1.3.2规则介绍1.3.3实现步骤一、Drools实战1.1个人所得税计算器本小节我们需要通过Drool... 查看详情

drools规则引擎初探(代码片段)

...么Drools是为Java量身定制的基于Charles Forgy的RETE算法的规则引擎的实现。具有了OO接口的RETE,使得商业规则有了更自然的表达。Rule是什么呢? 一条规则是对商业知识的编码。一条规则有 attributes ,一个 LeftHandSide&... 查看详情

drools规则引擎中易混淆语法分析_循环触发导致死循环分析(代码片段)

...开发与测试阶段解决了,未波及到prod。首先看这样两条规则/***规则1_set默认利率*/rule"rate_default"no-looptruewhen$request:AmountRateRequest(calculateEnum==CalculateEnum.INTEREST||calculateEnum==CalculateEnu 查看详情

drools笔记:初识与入门

Drools是什么?Drools是一个用Java编写的开源规则引擎,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。通俗地说,Drools是一种工... 查看详情

drools整合springboot整合drools测试例子--个税计算器规则(代码片段)

规则引擎,主要作用,就是将规则与java代码分离,可通过修改规则实时生效。让非java程序员,只要熟悉业务,也可以写规则。规则引擎主要用在一些,打折、风控前置、后置、结算等模块地方。新建一个droolsdemo的maven工程。pom.... 查看详情

java规则引擎--drools

Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。 本文所使用的demo已上传 http... 查看详情

java开源的规则引擎drools电商行业实战(含完整代码)(代码片段)

...量是动态的,另外考虑到扩展性,满足将来业务规则的增长,不只是限制领取数需要新加其他条件,为了满足不断变化的业务场景,经分析后选用规则引擎Drools来实现。本场Chat通过一个电商行业的领取优惠券... 查看详情

googleaviator——轻量级java表达式引擎实战(代码片段)

...擎技术及比较Drools简介Drools(JBossRules)是一个开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。除了应用了Rete核心... 查看详情

flowable入门系列文章46-业务规则任务(代码片段)

1、描述业务规则任务用于同步执行一个或多个规则。Flowable使用DroolsExpert,Drools规则引擎来执行业务规则。目前,包含业务规则的.drl文件必须与定义业务规则任务的流程定义一起部署以执行这些规则。这意味着进程中使... 查看详情

drools简单应用(代码片段)

...事。  最近在对项目的积分模块进行改造的时候想到了规则引擎,使用规则引擎处理复杂而且多变的业务逻辑有其非常大的优势,包括实时更新、性能等方面。不多说,直接上代码:1、第一步先写好工具类,有了工具类,只... 查看详情

springboot2整合drools规则引擎,实现高效的业务规则

...这里一、Drools引擎简介1、基础简介Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。... 查看详情

drools只执行一个规则或者执行完当前规则之后不再执行其他规则(转)(代码片段)

...1814.html kieSession.fireAllRules(1);:只执行其中一条可执行规则Drools是一款基于Java的开源规则引擎  实现了将业务决策从应用程序中分离出来。  优点:    1、简化系统架构,优化应用    2、提高系统的可维护性和... 查看详情