EasyRule规则引擎设计及使用说明.docx
《EasyRule规则引擎设计及使用说明.docx》由会员分享,可在线阅读,更多相关《EasyRule规则引擎设计及使用说明.docx(11页珍藏版)》请在冰点文库上搜索。
EasyRule规则引擎设计及使用说明
规则引擎使用文档
2012年10月
1.设计背景
复杂企业级项目的开发以及其中随外部条件不断变化的业务规则(businesslogic),迫切需要分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其他统一的地方,让它们能在运行时(即商务时间)可以动态地管理和修改从而提供软件系统的柔性和适应性。
规则引擎正是应用于上述动态环境中的一种解决方法。
2.什么是规则引擎
为了进一步规范系统数据的有效性、完整性,加强对数据的校验在目前各个系统是必不可少的一部分,规则引擎实现对系统数据的纵向、横向校验以及表与表之间逻辑关系校验,它可以作为一个子模块添加到任意以JAVA为基础的系统当中去,同时制定相关接口规范,开发人员只需按照规范便可以对它进行二次扩展性的开发。
3.体系结构
规则引擎由以下六大部分组成:
1.函数:
负责对数据的格式化处理,比如数据统计。
2.公式:
负责对数据的逻辑处理,比如值之间比大小。
3.规则配置文件:
配置校验数据的规则。
4.规则模型配置文件:
配置校验数据规则的集合。
5.公式、函数配置文件:
配置系统所有相关的函数以及公式。
6.引擎主程序:
调用规则引擎的入口。
7.数据库配置文件:
与数据库相关的配置文件。
以上几大部分均可由开发人员灵活配置以便后续再次扩展,程序类包机构如下如下:
类图如下:
4.如何调用规则引擎
将规则引擎作为子模块加入的主业务系统后,主业务系统只需在程序里调用规则引擎的com.git.easyrule.service.RuleService类的runRule()和runModel()方法即可,规则引擎启动之后便根据自身的规则配置项对数据进行校验处理,处理结果将存入规则文件配置的指定表当中。
在调用RuleService类的runRule()和runModel()方法时需传入几个参数,以下表格是参数说明:
参数名
类型
中文说明
备注
RuleID/ModelID
String
规则ID/规则模型ID
数据校验规则文件
paramMap
Map
参数对象
后台所有规则需要用到的变量集合
源方法代码:
RuleServicers=newRuleService();
MapparamMap=newHashMap();
paramMap.put("num","1");
paramMap.put("cardNo","130********7125635");
ListmsgList=rs.runModel("M0002",paramMap);
ListmsgList=rs.runRule("R0001",paramMap);
5.配置使用说明
规则引擎的配置由三大部分组成:
1.数据库配置:
配置被检测的数据源。
2.公式函数配置:
系统所有的公式函数类由该配置文件管理。
3.校验规则配置:
系统所有的规则由该配置文件管理。
4.校验规则模型配置:
系统所有的规则校验模型由该配置文件管理。
5.1数据库配置文件env.properties
规则引擎的数据配置既可以共用主业务系统的配置文件,也可以独立采用该文件对其进行灵活配置,以下是具体的配置说明:
配置项
中文说明
备注
easyDriver
JDBC访问数据库的驱动
easyUrl
数据库路径
easyUsername
用户名
easyPassword
密码
5.2公式、函数配置文件ruleEngine_beans.xml
具体详细请参考本配置文件里的内容,本文件是标准的Spring配置文件。
5.3数据校验规则文件ruleEngine_rules.xml
1.rule节点:
对表数据的纵向校验以及逻辑校验。
节点
属性
含义
备注
rule
id
规则ID
name
规则名称
checktype
检测的公式
1.该ID应与
ruleEngine_beans.xml
配置的ID保持一致。
2.公式可以有多个,以“-”符号分隔。
startValue
范围顶值
endValue
范围底值
checkedFieldName
被检测的值
errCode
错误码
errMsg
错误信息
targetDataList
比对值
可以有多个,以”;”符分隔
checkLevel
检查级别
1:
info;2:
warn;3:
err
sql
通过该SQL语句获取结果集,SQL可以有变量以@开头
示例:
selectcount(loan_id)v1,nvl(max(loan_length),0)v2fromTB_LON_LOANwhereCLOSE_FLAG='0'andLOAN_LEVEL_FIVE_CLASSin('3','4','5')andCUS_ID=@cusId
selectcount(loan_id)v3fromTB_LON_LOAN_APPLICATIONwhereCUS_ID=@cusId
示例说明:
规则引擎执行“R0002”规则的顺序如下:
1.规则引擎获取SQL节点的语句,如果该SQL语句有变量,规则引擎根据将预设的变量值赋给SQL语句组成一个可以执行的字符串,并通过该字符串到数据库查出符合条件的结果集。
如果结果集没有数据将不执行本节点的所有规则。
2.如果结果集有数据,规则引擎先执行R0001规则:
获取结果集中的v1,v2,v3字段对应的值,并将这三个变量值作为参数执行checkedFieldName设置的函数,计算出的结果作为此规则的被检测值传入checktype节点定义的所有公式中,greater公式将该值和startValue配置的值进行是否大于运算,如果返回true继续执行下一个公式,如果返回false,该规则直接不通过。
5.4数据校验规则模型文件ruleEngine_models.xml
本文件的配置节点由两部分组成,规则引擎根据不同节点进行相应的规则校验:
1、model节点:
提供负责的逻辑模型校验。
节点
属性
含义
备注
model
id
规则模型ID
name
规则模型名称
isIgnore
是否忽略错误
1.true:
忽略规则模型中的规则错误
2.false:
不忽略规则模型中的规则错误
当模型配置为true(忽略错误)时,模型中的所有规则都会执行,最后将返回所有错误规则的检查结果集合;
当模型配置为false(不忽略错误)时,模型中只要有一条规则不符合规则,就会停止检查,返回该条规则的错误信息。
rule
配置模型中包含的规则ID
2、rule节点:
对表数据的纵向校验以及逻辑校验。
节点
属性
含义
备注
rule
id
规则ID
name
规则名称
checktype
检测的公式
1.该ID应与
ruleEngine_beans.xml
配置的ID保持一致。
2.公式可以有多个,以“-”符号分隔。
startValue
范围顶值
如果是sql查询的结果以$开头,如果是外部传入则以@开头。
endValue
范围底值
如果是sql查询的结果以$开头,如果是外部传入则以@开头。
checkedFieldName
被检测的值
如果是sql查询的结果以$开头,如果是外部传入则以@开头。
errCode
错误码
errMsg
错误信息
可以包含规则参数,参数名与规则内的参数名一致即可。
targetDataList
比对值
可以有多个,以”;”符分隔
checkLevel
检查级别
1:
info;2:
warn;3:
err
sql
通过该SQL语句获取的结果可以作为规则的参数,以$开头,SQL可以有变量以@开头,通过外部传入。
6.引擎现有的公式、函数
1.公式
公式名
说明
是否已经支持
eqs
判断字符串是否相等
是
ineqs
判断字符串是否不相等
是
eqn
判断数字是否相等
是
ineqn
判断数字是否不相等
是
greater
大于
是
less
小于
是
ge
大于等于
是
le
小于等于
是
isnum
判断是数字
是
notnum
判断不是数字
是
isint
判断是整数
是
idvalid
判断身份证合法
是
dateafter
在XX日期之后
否
datebegin
在XX日期之前
否
2.函数
函数名
说明
是否已经支持
Sum(p…..N)
汇总多个参数值得和,参数可以有多个,中间以逗号分隔
是
Len(p)
取参数的长度
是
注:
1.P:
代表参数,N代表可以有多个。
2.规则引擎的函数支持函数嵌套,嵌套之后的函数会预先执行最里面的函数再依次执行外面的函数,如:
checkedFieldName="#sum(#sum($v1,$V5),#sum($v2,$V6),$v3,$v4)"
执行顺序:
首先执行#sum($v1,$V5)函数,然后执行#sum($v2,$V6)函数,最后执行最外面的#sum函数。
7.扩展规则引擎
由于目前规则引擎提供的规则数量有限,为了使其更加符合主业务系统各方面的数据校验处理,规则引擎提供了相关接口供开发人员再次扩展。
规则引擎的扩展主要包括两部分:
一.函数扩展,二.公式扩展。
7.1.扩展函数
1.实现函数接口:
主要实现com.git.easyrule.func.Function接口的publicStringgetValue(Listlist)方法,同时实现类放在com.git.easyrule.func目录
2.添加配置项:
在ruleEngine_beans.xml文件中添加配置Bean,同时Bean的Name
以”function_”开头,如下:
7.2扩展公式
1.实现公式接口:
主要实现com.git.easyrule.formula.Formula接口的
publicbooleanexecute(Rulerule,Maprecord,MapsysVarMap)方法,同时实现类放在com.git.easyrule.formula.impl目录下,参数说明如下:
rule:
具体规则。
Record:
MAP结果集
sysVarMap:
系统变量MAP。
2.添加配置项:
在ruleEngine_beans.xml文件中添加配置Bean,同时Bean的Name
以”Formula_”开头,如下:
class="com.git.easyrule.formula.impl.FormulaForIneqString">
8结束语
规则引擎为管理多变的业务逻辑提供了一种解决方案。
规则引擎既能管理应用层的业务逻辑又能使表示层的页面流程可订制。
这就给软件架构师设计大型信息系统提供了一项新的选择。