规则引擎Drools

本文介绍了Drools,一个基于Java的开源规则引擎,它允许以规则脚本形式存储规则,便于动态变更而不需修改代码。Drools的工作原理是通过Fact对象传递数据,并通过.drl文件定义规则。规则包括package、import、属性和rule,如no-loop属性防止规则无限循环。Drools的条件部分(LHS)和结果部分(RHS)分别定义执行条件和满足条件后的操作。条件部分支持多种比较操作符,结果部分可以插入、更新、修改或删除Fact对象。
摘要由CSDN通过智能技术生成

    Drools是一个基于java的开源规则引擎,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重新部署服务器就可以立即在线上环境生效,在实际生产环境中方便自行改变某些参数而不需要修改源代码。

1、Drools语法

    开始语法之前首先要了解一下drools的基本工作过程,通常而言我们使用一个接口来做事情,首先要传进去参数,其次要获取到接口的实现执行完毕后的结果。而drools也是一样的,我们需要传递进去数据,用于规则的检查,调用外部接口,同时还可能需要获取到规则执行完毕后得到的结果。

    在drools中,这个传递数据进去的对象,术语叫 Fact对象。Fact对象是一个普通的java bean,规则中可以对当前的对象进行任何的读写操作,调用该对象提供的方法,当一个java bean插入到workingMemory中,规则使用的是原有对象的引用,规则通过对Fact对象的读写,实现对应用数据的读写,对于其中的属性,需要提供getter setter访问器,规则中,可以动态的往当前    workingMemory中插入删除新的fact对象。

    规则文件可以使用 .drl文件,也可以是.xml文件,这里我们使用drl文件。在drl文件中,主要由这几部分组成,即package、import、属性以及rule。规则语法:

package:对一个规则文件而言,package是必须定义的,必须放在规则文件第一行,类似于java当中的package,表示一个路径。特别的是,package的名字是随意的,不必对应物理路径,这里只是逻辑上的一种区分。

比如:package com.drools.demo.point

import:导入规则文件需要使用到的外部变量,这里的使用方法跟java相同,但是不同于java的是,这里的import导入的不仅仅可以是一个类,也可以是这个类中的某一个可访问的静态方法。

比如:import com.drools.demo.point.PointDomain;

          import com.drools.demo.point.PointDomain.getById;

          import java.math.BigDecimal;

rule:定义一个规则。rule "ruleName",这是规则名,我的理解是更像java中的方法名。一个规则可以包含三个部分:

属性部分:定义当前规则执行的一些属性等,比如是否可被重复执行、过期时间、生效时间等。

条件部分,即LHS,定义执行当前规则的判断条件,条件符合的话执行then部分

结果部分,即RHS,这里可以写普通java代码,即当前规则条件满足后执行的操作,可以直接调用Fact对象的方法来操作应用。

简单的规则例子:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值