RuleEngine -- 一款使用简单,入门方便的数据库规则引擎-程序员宅基地

技术标签: c#  java  数据库  

规则引擎是嵌入在应用程序中的组件,实现了决策逻辑和业务系统的分离功能。在现实业务场景中,决策逻辑的复杂性和可变性,使得决策引擎的应用越来越多,把决策逻辑单独分离出来也显得越来越重要了。

目前市场上常用的规则引擎有Ilog JRules,Drools,Jess,Visual Rules等。Ilog JRules 是最有名的商用BRMS;Drools 是最活跃的开源规则引擎;Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代表; Visual Rules(旗正规则引擎)国内商业规则引擎品牌。但是这些规则引擎都需要生成大量的bean类和Judgment类,在实现规则判断的时候,需要编写大量的java代码,或者使用rete规范,另外编写脚本。然后我们实际编程中,这些bean的数据大多数存于数据库中,规则引擎的判断实际上是SQL脚本运行的一部分。

因此在这里介绍一款可以使用SQL脚本来定义规则的中间件 -- RuleEngine。RuleEngine已经登记在Maven中的中央库中了,我们可以直接在POM.xml文件中包含就可以了。

 

<dependency>

        <groupId>com.github.hale-lee</groupId>

        <artifactId>RuleEngine</artifactId>

        <version>0.1.0</version>

    </dependency>

 

   使用前,需要先配RuleEngine的配置文件ruleEngine.properties,RuleEngine支持3种规则定义方式,分别是1,数据库table配置;2,xml文件配置;3,Drools的drl文件方式。

在ruleEngine.properties中设置rule.reader字段即可,下面分别说明:

 

1, 数据库table配置方式,在ruleEngine.properties中,设置rule.reader = database

此时需要配置下面的信息

a)     db.rule.table字段,设置db.rule.table=tl_rule_define(表名)。此表结构的定义在https://github.com/Hale-Lee/RuleEngine/tree/dev/referenc中有定义(有oralce和mysql的2种方式)。

b)    db.accesser数据连接方式,RuleEngine提供了直接的jdbc连接,Druid连接池,Spring框架连接3种方式。 如果使用jdbc链接或者是Druid链接,那么需要设置db.accesser=tech.kiwa.engine.utility.DirectDBAccesser(设置DirectDBAccesser的UseDruid可以区别是否使用Druid连接池,默认是true使用)。如果直接使用Spring框架的连接,那么需要设置db.accesser= tech.kiwa.engine.utility. SpringDBAccesser。

RuleEngine也提供DBAccesser的接口,我们可以通过实现DBAccessor的接口的方法来自己获得自己的连接。

c)     如果使用jdbc链接或者是Druid链接,那么需要配置jdbc属性,或者是Druid的连接池参数,RuleEngine可以独立配置连接池参数,也可以直接使用项目中现有的连接参数。

典型的配置文件的方式如下(使用Druid配置):

 

#数据驱动

jdbc.driver=com.mysql.cj.jdbc.Driver

#jdbc.driver=oracle.jdbc.driver.OracleDriver

#数据库连接

jdbc.url=jdbc:mysql://127.0.0.1:3306/hosp?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=true

#数据库用户名

 

jdbc.username=oracle

jdbc.password=user

#规则定义的表

db.rule.table=TL_RULE_DEFINE

db.accesser=tech.kiwa.engine.utility.DirectDBAccesser

rule.reader=database

 

数据库表结构的定义如下:

 

 

-- Table structure for TL_RULE_DEFINE

 

-- ----------------------------

 

DROP TABLE "TL_RULE_DEFINE";

 

CREATE

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chenym196310/article/details/100792996

智能推荐

Maven解决: Failed to execute goal org.codehaus.mojo:buildnumber-maven-plugin-程序员宅基地

文章浏览阅读7.9k次。[ERROR] Failed to execute goal org.codehaus.mojo:buildnumber-maven-plugin:1.0-beta-4:create (default) on project shiro-root: Cannot get the revision information from the scm repository : 解决:搜索插件:b..._failed to execute goal org.codehaus.mojo:buildnumber-maven-plugin

Linux 下监控USB设备拔插事件_linux下如何监听硬件插入-程序员宅基地

文章浏览阅读2.1k次。原文链接:添加链接描述使用udev的规则来实现自2.6 核心开始,就可以使用udev 协助管理系统中各设备名称。例如,磁盘设备排序、网卡设备排序等。udev能动态地在/dev目录里产生自定义的、标识性强的设备文件或设备链接。udev依赖内核中的sysfs的支持。 自2.6 内核开始,引入了sysfs 文件系统。sysfs把连接在系统上的设备和总线组织成一个分级的文件,并提供给用户空间存取使用。udev 运行在用户模式,而非内核中。udev的初始化脚本在系统启动时创建设备节点,并且当插入新设备——加入驱动_linux下如何监听硬件插入

spark中使用Scala来写自定义分区器_用scala实现分区-程序员宅基地

文章浏览阅读393次。自定义分区器HashPartitioner源码解读: /*class HashPartitioner(partitions: Int) extends Partitioner { // 传进来的分区个数必须是大于等于0的,不然它会报错 require(partitions >= 0, s"Number of partitions ($partitions) cannot be negative.") // 重写分区器的抽象方法 // 记录它有多少个分区 就是外面_用scala实现分区

官方标准uboot2013移植4之编写自己的uboot_如何从官方uboot制作自己开发板适用的uboot-程序员宅基地

文章浏览阅读263次。1.由源码到可执行程序的过程1)源码.c-&gt;(编译)-&gt;elf可执行程序2)源码.c-&gt;(编译)-&gt;目标文件.o-&gt;(链接)-&gt;elf可执行程序3)源码.c-&gt;(编译)-&gt;汇编文件.S-&gt;(汇编)-&gt;目标文件.o-&gt;(链接)-&gt;elf可执行程序4)源码.c-&gt;(预处理)-&gt;预处理过的.i源文件-&a_如何从官方uboot制作自己开发板适用的uboot

JDBC高级_method selectbyid() should be void-程序员宅基地

文章浏览阅读837次。BaseDao方法补充为什么要提供该方法 完成一个查询返回值类型是Object[]。并且是存储于List集合中的一种方式,实际返回值类型是List<Object[]> 处理的是查询数据结果无法映射到类对象中,ORM。所有的数据按照查询结果字段顺序要求,从数据库中读取数据保存到Object数组,为了能满足多行数据查询要求,Object数组存储到List中方法分..._method selectbyid() should be void

unity热更新json_【专栏精选】Unity热更新之ILRuntime-程序员宅基地

文章浏览阅读290次。本文节选自洪流学堂公众号技术专栏《大话Unity2019》,未经允许不可转载。洪流学堂公众号回复专栏,查看更多专栏文章。洪流学堂,让你快人几步。你好,我是郑洪智。logo.png小新:“热更新真的是打开了一片天啊,现在我越发感觉热更新能做的事情太多了。之前做了一个项目,每次打包都好花费半小时,如果有热更新,只需要替换一下dll就行了。”大智:“没错,热更新可以大幅提高迭代效率,更能提高用户体验。”..._ilruntime litjson 读表慢

随便推点

泛海微FS68001 SOP8封装 无线充单片机IC领夹式麦克风加充电方案芯片_fs9926换到哪个网站了-程序员宅基地

文章浏览阅读1.3k次。近段时间 无线领夹式麦克风加充电的方案 火遍了市场。FS68001无线充IC做5W方案只需要外接FS4953和FS9926两个NP管就可以实现手机充电,过EMC移动电源无线充电器20V效应管双SOP8集成电路_fs9926换到哪个网站了

开关电源(DC-DC)与LDO电源的区别---效率_dcdc和ldo效率计算-程序员宅基地

文章浏览阅读6.2k次,点赞3次,收藏48次。所谓效率,其实就是传递到输出端的功率比,等于(传递的功率/输入的功率)*100%。我们首先通过理想的仿真模型来直观的看看它们的差别。我们对比TI的TPS5430(DC-DC)和LM2941(LDO),都是由15V转成5V。它们的典型电源链路结构及仿真结果分别如下:TPS5430(DC-DC)(5V-3A输出) 仿真结果:输入和输出电流如下:而输入_dcdc和ldo效率计算

tf.variable_scope 和 tf.name_scope 的区别_tf.name_scope和variable——scope-程序员宅基地

文章浏览阅读135次。这两个函数不仅名称相近,功能上也差不多,不过name_scope的使用范围更小,一般我们都选择variable_scope,下面说下这两个的区别。我们知道在TensorFlow中每个变量都有自己的作用域,我们常常用作用域+变量名来作为这个变量独一无二的名称。那么,这两个函数就是为了实现这样的功能的。请看下面代码:import tensorflow as tfwith tf.varia..._tf.name_scope和variable——scope

校办研修之计算机培训简报,学习永远在路上——2017年玉林骨干校长(园长)育秀工程培训班第七组基地研修简报...-程序员宅基地

文章浏览阅读220次。组长:覃茗副组长:陈剑组员:姚祥莲 陈妹 李翠兰首站 —— 卓尔不群 大器天下2017年12月7日,伴着初冬的萧瑟,穿过金黄色的银杏大道,我们走进了成都七中育才银杏校区。入门处高耸的三圣雕塑和灿烂的银杏树相得映彰,既有教育的严谨,又有生活的逸趣。 张校长带领大家参观校园环境。 校园内绿树成荫,草坪花坛错落有致,优美的环境令人心旷神怡、神清气爽。 名言警句遍及全校,真正"让每块石头..._玉林姚祥莲

Oracle 默认密码及修改密码_oracle 管理员用户初始化密码-程序员宅基地

文章浏览阅读8.5k次。默认密码: 用户名:sys 密码:change_on_install 用户名:system 密码:manager 用户名:internal 密码:oracle 用户名:scott 密码:tiger 遗失密码后修改密码 一个修改Oracle用户密码的小诀窍数据库版本:9.2.0.5 有时候我们可能不知道一个用户的密码,但是又需要以这个用户做一些操作,又不能去修改掉这个用户的密码,这个时候,就可以利用一些小窍门,来完成操作。 unix 的话,需要转到orac_oracle 管理员用户初始化密码

漏洞挖掘——实验2 Environment_Variable_and_SetUID_environment env 中危漏洞-程序员宅基地

文章浏览阅读5k次,点赞4次,收藏21次。题目labEnvironment_Variable_and_SetUIDpre1、linux下用open函数打开文件时,要是采用O_WRONLY模式为何容易产生竞争条件漏洞?换成O_WRONLY | O_CREAT | O_EXCL 模式后情况会如何?2、(不需要完全搞懂全部流程)阅读一篇文章“从一个漏洞谈到ptrace的漏洞发现及利用方法”,地址为http://www.ns..._environment env 中危漏洞