EasyRule概述
Easy-Rules是一款轻量级的规则引擎.
框架特点
轻量级类库和容易上手
基于POJO的开发与注解的编程模型
方便且适用于java的抽象的业务模型规则
支持从简单的规则创建组合规则
官方地址: https://github.com/j-easy/easy-rules
应用示例
入门示例
定义一个规则,在任何情况下都输出Hello world.
1 | public class HelloRoles { |
执行输出
1 | [main] INFO org.jeasy.rules.core.DefaultRulesEngineListener - Engine parameters { skipOnFirstAppliedRule = false, skipOnFirstNonTriggeredRule = false, skipOnFirstFailedRule = false, priorityThreshold = 2147483647 } |
通过API可以看到我们可以注册多个规则, 多个规则之间处理顺序可以通过设定优先级来定义, 规则优先级的上限值默认是Integer.MAX_VALUE(2147483647). 相同的优先级执行顺序按照规则名称的自然顺序执行.
优先级示例
不同优先级
代码示例
1 | public class WeatherRules { |
执行输出
1 | [main] INFO org.jeasy.rules.core.DefaultRulesEngineListener - Engine parameters { skipOnFirstAppliedRule = false, skipOnFirstNonTriggeredRule = false, skipOnFirstFailedRule = false, priorityThreshold = 2147483647 } |
通过注册规则可以看到, 注册时是按照优先级注册的, 并不是按照我们代码的顺序注册的. 执行校验输出时也是按照优先级校验然后匹配给出结果. 根据@Condition条件命中来进行对应的规则输出(相同条件可以定制多个规则, 规则命中则执行)
相同优先级
代码示例
1 | public class WeatherRules { |
执行输出
1 | [main] INFO org.jeasy.rules.core.DefaultRulesEngineListener - Engine parameters { skipOnFirstAppliedRule = false, skipOnFirstNonTriggeredRule = false, skipOnFirstFailedRule = false, priorityThreshold = 2147483647 } |
可以看到, 注册顺序在优先级相同的时候是按照规则名称的自然顺序注册, 校验的时候按照注册顺序校验. 这种场景我们也可以通过下面方式实现,同一事件条件绑定多个依赖逻辑.
1 | public class WeatherRules { |
执行输出
1 | [main] INFO org.jeasy.rules.core.DefaultRulesEngineListener - Engine parameters { skipOnFirstAppliedRule = false, skipOnFirstNonTriggeredRule = false, skipOnFirstFailedRule = false, priorityThreshold = 2147483647 } |
硬编码示例
上面的示例代码也可以通过硬编码方式实现
1 | public class ApiRules { |
多规则示例
代码示例
1 | public class WeatherRules { |
执行输出
1 | It rains, with rule1 . |
执行按照规则注册的优先级, 规则1>规则3>规则2, 进行场景条件判断, rain=true时输出rains相关打印、sun=true时输出 sun相关打印.