规则引擎
概述
创建一些带有条件和动作的对象,将它们存储在一个集合中,然后遍历它们以评估条件并执行这些动作。
适用范围
Pangea v2.0.1.3+
快速上手
1、在业务模块的pom.xml
中添加依赖
html
<!-- 规则模块 -->
<dependency>
<groupId>com.hisense.pangea</groupId>
<artifactId>pangea-common-easyrules</artifactId>
<version>${pangea.version}</version>
</dependency>
2、在Application类或Configuration类上添加注解@EnableEasyRules
java
@EnableEasyRules
public class PangeaSampleApplication {
public static void main(String[] args) {
SpringApplication.run(PangeaSampleApplication.class, args);
}
}
3、在applicatiom.yml
中标记dev环境,可以实现在UI上自动生成规则组(这个原理是pangea-common-easyrules代码包中RulesActuator类增加了判断,如果"dev".equals(activeProfile)就会生成规则组)
html
spring:
profiles:
active: dev
生产环境请标记为prod,将停止UI更新规则组 注意:规则组名称需要满足正则表达式("^[A-Za-z0-9.]*$")
4、在系统管理-规则引擎组
菜单下维护对应规则及规则组特性
规则组特性:
- skip_on_first_applied_rule 应用当前规则时,跳过其余规则
- skip_on_first_non_triggered_rule 没有触发规则时,跳过其余规则
- skip_on_first_failed_rule 应用当前规则失败时,跳过其余规则
- priority_threshold 自定义规则的优先级超过定义的阈值时,跳过其余规则
5、在应用规则引擎的类上根据查询的规则执行相应的操作
java
//业务类中注入规则解析器
@Autowired
RulesActuator rulesActuator;
public void ruleTest(){
//调用规则引擎
// 处理事实对象 T t
RuleResult result =rulesActuator.usingRules("规则组名称") //仅可以使用英文、数字和点. //中文名称可以在页面上编辑,以便于阅读
.put("param1",t) //添加事实对象,可以添加多个,参数名可以任意(比如实例中的param1)
.put(具体规则) //当有代码自定义规则时使用,可以省略。
.fire();
//获取运算后对象
T t = result.get("param1");
}
注意:以上代码在实际业务使用中建议分三步来写: 第一步 获取规则执行器:RulesActuatorBuilder rulesActuatorBuilder = rulesActuator.usingRules(ruleGroupName); 这段代码执行后会创建规则组,名称不可重复 第二步 添加事实对象:RuleResult ruleResult = rulesActuatorBuilder.put("input", demo).fire();//demo就是事实对象 第三步 获取运算后的对象:Demo demo2 = ruleResult.get("input");
参考文档
https://github.com/j-easy/easy-rules/wiki
https://github.com/j-easy/easy-rules