在Spring-boot使用easy-rules规则执行引擎

  • 使用规则引擎的背景:
    • pom依赖
    • 提供测试方法

使用规则引擎的背景:

在项目中需要使用到用户自定义策略,比如:

(订单金额 > 50)  &&  ((用户姓名  contains '张') || ( 用户姓名  contains '王'))

对于上面这种格式使用规则引擎在合适不过,自己开发工作量太大。。并且还会有一些列未知的bug
下面开始贴代码

pom依赖

<properties><easy.rules.version>4.0.0</easy.rules.version>
</properties><!--easy-rules 执行引擎--><dependency><groupId>org.jeasy</groupId><artifactId>easy-rules-core</artifactId><version>${easy.rules.version}</version></dependency><dependency><groupId>org.jeasy</groupId><artifactId>easy-rules-mvel</artifactId><version>${easy.rules.version}</version></dependency><dependency><groupId>org.jeasy</groupId><artifactId>easy-rules-spel</artifactId><version>${easy.rules.version}</version></dependency>

提供测试方法

    /*** 下面的案例 简单的说就是将一堆的if eles 简化了 使用*  easy rules 引擎计算了一切,方便很多* @param args*/public static void main(String[] args) {//创建一个Person实例(Fact)Person tom = new Person("Tom", 20);Facts facts = new Facts();facts.put("person", tom);//链式编程Rule ageRule = new RuleBuilder().name("age rule").description("Check if person's age is > 18 and marks the person as adult").priority(1).when(f -> {Person person = f.get("person");return person.getAge() > 18;}).then(f -> {Person person = f.get("person");person.setAdult(true);}).build();//表达式 -- 常用的 不支持正则匹配Rule alcoholRule = new MVELRule().name("age rule") //标题.description("Check if person's age is > 18 and marks the person as adult") // 备注.priority(1)  //有先级.when("person.name contains \"m\"")  //可以理解为条件 ,支持多个 比如 (parson.age == 18) || (parson.name == "Tom")  所有支持的表达式 在这个类下org.mvel2.debug.DebugTools.then("person.setAdult(true);"); //当符合上面的条件的时候执行的操作//脚步形式 -- 支持使用正则匹配Rule spELRule = new SpELRule().name("age rule").description("Check if person's age is > 18 and marks the person as adult") .priority(1).when("#{['person'].age > 2}") //org.springframework.expression.spel.standard.TokenKind 支持的全部表达式.then("#{['person'].setAdult(true)}");//还可以支持yaml的形式//。。。。。。yaml 和上面的支持格式是一样的,写的地方不一致而已,项目中使用表达式的方式居多Rules rules = new Rules();
//        rules.register(spELRule);rules.register(alcoholRule);
//        rules.register(ageRule);//创建规则执行引擎,并执行规则RulesEngine rulesEngine = new DefaultRulesEngine();rulesEngine.fire(rules, facts);System.out.println(tom);}

实体

@ToString
@Data
public class Person {public Person(String name,Integer age){this.name = name;this.age = age;}private boolean adult;private String name;private Integer age;
}

在Spring-boot使用easy-rules规则执行引擎相关推荐

  1. Spring Boot 使用 Kotlin Script Template 模板引擎kts 开发web应用

    Spring Boot 使用 Kotlin Script Template 模板引擎kts 开发web应用 在 Spring Framework 5.0 M4 中引入了一个专门的Kotlin支持. K ...

  2. 一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 前言 有时候我们需要在应用启动时执行一些代码片段,这些片 ...

  3. 把Spring Boot项目打为可执行jar包

    前言 这两天没太多事了,就去学了一下后端的内容,发现只要有基础了,学其他的还是挺快的. 本篇解决的是SpringBoot打成可执行的jar包,在网上找别人直接用命令,可是我这边显示错误,于是就自己查了 ...

  4. javafx应用启动自动执行函数_一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式...

    前言 有时候我们需要在应用启动时执行一些代码片段,这些片段可能是仅仅是为了记录 log,也可能是在启动时检查与安装证书 ,诸如上述业务要求我们可能会经常碰到 Spring Boot 提供了至少 5 种 ...

  5. Spring Boot静态资源映射规则

    目录 理论 演示 理论 使用Spring Boot: 1. 创建Spring Boot应用,选中需要的模块: 2. Spring Boot已默认将这些场景配置好,只需要在配置文件中指定少量配置就可以运 ...

  6. Spring boot整合Drools、flowable决策引擎解决方案

    一.Drools:DROOLS(JBOSS RULES )具有一个易于访问企业策略.易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快.效率高.业务分析师或审核人员可以利用它轻松查看业务规则 ...

  7. IntelliJ IDEA 之 Spring Boot (五) Freemarker 模板引擎渲染 Web 试图

    Freemarker 把动态页面转成静态的微HTML,目的是提高引擎的搜录,现在大多的互联网公司都是在用Freemarker技术,我们也知道现在的网页访问都是.html或者.htm 等等,除了政府的项 ...

  8. Spring Boot技术之异步任务执行

    在spring中有一个AsyncConfigurer接口,实现该接口可以配置异步线程池,源码部分如下: public interface AsyncConfigurer {/*** 获取线程池* Th ...

  9. 介绍Spring Boot 启动时,自动执行指定方法的 7 种方法

    目录 前言 实现方式 1.实现ServletContextListener接口contextInitialized方法 2.静态代码块方式 3.@PostConstruct注解方式 4. 实现Serv ...

最新文章

  1. 在线听音乐要收费,你愿意吗?
  2. Windows2003实用技巧
  3. python【蓝桥杯vip练习题库】ADV-359分解质因数
  4. python中的字符串常用函数
  5. php dns更新,php_mzdns: 站群,大量域名 通过 dns 服务商 api 批量添加 ip 工具。你懂的~ 基于 mzphp2 框架。...
  6. shared_ptr智能指针源码剖析
  7. mysql 性能问题_mysql性能问题
  8. 起源自天文学的PostgreSQL 优化器成本因子校对
  9. HTML判断如果并且,将html转换为js,并且其中含有判断语句
  10. mac android通知中心,有什么软件可以把安卓通知栏变成苹果通知栏
  11. UIKit Dynamic主题学习笔记
  12. log4j的详细介绍
  13. 如何更改字体隶书html,隶书转换
  14. java 正则表达式 例子_Java正则表达式例子汇总
  15. C语言中按位取反操作符详解
  16. 脉聊社交网站源码类似微博的社交源码 模板UI非常漂亮自适应手机版 重点是有原生APP
  17. 数据结构与算法课设:基于交通路线的规划系统
  18. 纹理过滤中的双线,三线过滤
  19. DDS:domain
  20. 你还深陷在上半年工作和生活的一团乱麻中?可以试一下我说的这个“破局”之法

热门文章

  1. 卡牌集换式交易系统(玩家)
  2. 使用超声波传感器采用图形化编程制作Arduino自动跟随小车
  3. Unity多组件脚本执行顺序控制
  4. pycharm里使用os.system
  5. 天河三号超级计算机六连冠,“天河二号”这么牛 “天河三号”什么时候面世?...
  6. 关于 HTTPS 和 SSL
  7. 解决JVM内存不足的问题
  8. Linux常用基本命令之二
  9. 非法作坊死猪拌入剧毒农药腌制腊肉公开销卖
  10. 一点一点学ASP.NET之基础概念——HttpModule