easy Rule就是一个轻量级的规则引擎,它可以直接注入spring bean类,可以查看github上对它的介绍:GitHub - j-easy/easy-rules: The simple, stupid rules engine for Java
easy rules是一个简单而强大的java规则引擎,它有以下特性:
- 轻量级框架
- 学习成本低
- 基于POJO 为定义业务引擎提供有用的抽象和简便的应用
- 从原始的规则组合成复杂的规则
它主要包括几个主要的类或接口:Rule,RulesEngine,RuleListener,Facts
还有几个主要的注解:@Action,@Condition,@Fact,@Priority,@Rule
使用easy rules有两种方式:
- 实现Rule接口,并实现其evaluate和execute方法。
- 使用@Rule注解修饰POJO
目录
EasyRule源码
几种创建规则的方式
使用easy Rule实战
查看下源码:
由上面代码可以知道:一个规则由名称、描述、优先级三个属性和判断、执行两个方法组成,实现Rule接口,和使用@Rule,@Condition,@Action,@Priority,@Fact注解的效果是一样的。
RulesEngine负责检查和开启规则,同时可以得到规则引擎的参数和规则监听器列表
RuleListener 规则执行过程的监听器,可以监听规则是否触发,规则执行的结果
Facts就是一个hashmap,通过注解@Fact(String value),其中的value是map的key,可以拿到Facts中的value。
大致的步骤:
- 创建各种规则,即rule.可以通过 pojo 或 RuleBuilder API 两种方式创建。
- 创建规则容器Rules rules = new Rules();
- 注册创建的规则rules.add(rule);
- 创建流,即facts.流控制规则的参数输入.Facts facts = new Facts();facts.add("参数名", 参数值);
- 创建引擎,即RulesEngine。
- 由引擎把facts和rules结合进行处理,RulesEngine.fire(rules, facts);
- 流式创建规则
- 注解形式
- 创建规则文件
解析yml规则文件
- 注解加流式形式创建规则
加载规则到规则引擎,并注入参数触发规则
下面给出自己的一个使用easy rule规则引擎调用业务类的例子:
1:封装 规则引擎
可以看到上面我是直接注入的参数是业务类,Spring管理的业务类,并且直接调用业务类方法,并且传入参数。
具体的注入参数,以及业务类:
这里我写了一个线程池,通过阻塞队列来并发执行规则:
我们通过上面注入的规则监听器去监听规则的执行情况 ,下面是我自己定义的监听类,实现类 RuleListener接口