Drools规则引擎入门指南(二)

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

属性

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

1. salience优先级

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

123456789101112131415
 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
1234
@Test   public void testSalience() {       kieSession.fireAllRules();   }

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

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

12345678910111213
 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
123456789
@Testpublic void testDateEffective() {    kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("dateEffective"));}

@Testpublic 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时这条规则将不再可用

123456
rule "enabled"enabled false    when    then        System.err.println("被禁用的规则");end
1234
@Test    public void testEnabled() {        kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("enabled"));    }

函数

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

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

12345678910111213141516171819202122232425262728293031
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

原文地址:https://www.cnblogs.com/zhixiang-org-cn/p/10112059.html

时间: 2024-10-01 02:19:48

Drools规则引擎入门指南(二)的相关文章

drools规则引擎因为内存泄露导致的内存溢出

进入这个问题之前,先了解一下drools: 在很多行业应用中比如银行.保险领域,业务规则往往非常复杂,并且规则处于不断更新变化中,而现有很多系统做法基本上都是将业务规则绑定在程序代码中. 主要存在的问题有以下几个方面: 1) 当业务规则变更时,对应的代码也得跟着更改,每次即使是小的变更都需要经历开发.测试验证上线等过程,变更成本比较大. 2) 长时间系统变得越来越难以维护. 3) 开发团队一般是由一个熟悉业务的BA(业务分析人员)和若干个熟悉技术的开发人员组成,开发人员对业务规则的把握能力远不及

Drools 规则引擎环境搭建

一.关于 drools 规则引擎 前面写过一篇 Drools 规则引擎相关的文章,这篇文章主要记录一下规则引擎的环境搭建和简单示例.不熟悉 drools 的朋友可以看看这篇文章: 自己写个 Drools 文件语法检查工具--栈的应用之编译器检测语法错误 介绍的内容: Drools 规则引擎的使用场景 Drools 规则引擎的优点 Drools的基本工作工程(Fact对象.Drl文件内容.Drools的基础语法) drools 文件的形式 Drools 文件语法初步检查 二 .Drools 的环境

Drools规则引擎-如果判断某个对象中的集合是否包含指定的值

规则引擎集合相关处理 在实际生产过程中,有很多关于集合的处理场景,比如一个Fact对象中包含有一个集合,而需要判断该集合是否包含某个值.而Drools规则引擎也提供了多种处理方式,比如通过from.contains.exists等进行操作,比较. 当然也可以通过function函数来做相应的比较,在个在其他章节讲到过,就不在此赘述.下面重点以几个实例才进行讲解,在具体实践中根据具体情况来进行运用. 实例 省略掉基本的配置,直接看调用代码和规则代码. 测试调用代码: public class Co

SpringBoot2 整合 Drools规则引擎,实现高效的业务规则

本文源码:GitHub·点这里 || GitEE·点这里 一.Drools引擎简介 1.基础简介 Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效.具有易于访问企业策略.易于调整以及易于管理的特点,作为开源业务规则引擎,符合业内标准,速度快.效率高. 2.规则语法 (1).演示drl文件格式 package droolRule ; import org.slf4j.

Drools规则引擎初窥---drl和决策表实现[实例]

因项目需要,看了下drools规则引擎.写了一个比较简单的drools的drl规则和决策表实现的例子. 规则说明: 网络商城要举办活动(奖励额外积分), 订单原价金额在 100以下, 不加分 100-500 加100分 500-1000 加500分 1000 以上 加1000分 1.建立最基本的Drools项目结构并引入必须的类库.(这里采用junit来执行单元测试).创建一个Java Project,建立maven形式的源码包. 2.定义实体类Order.java 1 import java.

drools规则引擎初探

1.drools是什么 Drools是为Java量身定制的基于Charles  Forgy的RETE算法的规则引擎的实现.具有了OO接口的RETE,使得商业规则有了更自然的表达. Rule是什么呢? 一条规则是对商业知识的编码.一条规则有 attributes ,一个 Left Hand Side ( LHS )和一个 Right Hand Side ( RHS ).Drools 允许下列几种 attributes : salience , agenda-group , no-loop , au

Spring Boot+Drools规则引擎整合

目的 官方的Drools范例大都是基于纯Java项目或Maven项目,而基于Spring Boot项目的很少. 本文介绍如何在Spring Boot项目上加上Drools规则引擎. POM依赖 POM文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=&q

Drools 规则引擎 BRMS

安装说明 | Drools中文网 http://www.drools.org.cn/category/install Drools规则引擎-在微服务中的应用 - 简书 https://www.jianshu.com/p/887ff9021eb3 Drools规则引擎-在微服务中的应用 - 简书 https://www.jianshu.com/p/887ff9021eb3 微服务组件-规则引擎 - Fx_demon - OSCHINA https://my.oschina.net/fxdemon/

规则引擎入门

什么是规则引擎? 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规则,并根据业务规则做出业务决策. 参考: http://baike.baidu.com/link?url=BfAR-sxz1ryvOZ4uSVCqn9Csy51U5qCUaIomAQBogPE7FOxbbDB-2iXWR6N8FReIkoNNdc-Hk4y0sxKWpknWd_ 规则引擎和工作流引擎有什么区别? 工作流引