drools 规则引擎和 solon-flow 哪个简单? solon-flow 简明教程
前言
做电子政务的项目时,经常会有大量的业务逻辑变更,但其实里面的业务改动,其实就是一些业务逻辑变动。
而程序员编写的代码也没有任何技术含量,跟着式样书逐字逐句的翻译就行。大量的 if/else
判断遍布整个项目,维护难度极大。
而这个 solon-flow 规则与流引擎,可以方便的将业务的整体逻辑移出,更加方便程序的可读性。
准备
第一步 随便建个 maven 项目
第二步 添加 solon-flow 依赖
<dependency> <groupId>org.noear</groupId> <artifactId>solon-flow</artifactId> <version>3.0.9</version> </dependency>
第三步 在 src\main\resources\flow
下面添加规则文件,规则文件可以是 json 或者 yml 结尾(这里用 yml 格式,简明些)
案例一
先创建个实体类:
public class Order { private Double originalPrice;//订单原始价格,即优惠前价格 private Double realPrice;//订单真实价格,即优惠后价格 public String toString() { return "Order{" + "originalPrice=" + originalPrice + ", realPrice=" + realPrice + '}'; } public Double getOriginalPrice() { return originalPrice; } public void setOriginalPrice(Double originalPrice) { this.originalPrice = originalPrice; } public Double getRealPrice() { return realPrice; } public void setRealPrice(Double realPrice) { this.realPrice = realPrice; } }
创建 bookDiscount.yml 文件,建立相应处理链(或者规则链)。链有3个节点, start 和 end 表示链条的开头与结尾,book_discount_1 为规则执行节点:
id: "book_discount" nodes: - id: "book_discount_1" when: "order.getOriginalPrice() < 100" task: | order.setRealPrice(order.getOriginalPrice()); System.out.println("没有优惠");
单测参考:
@Test public void case1() throws Throwable { FlowEngine flowEngine = FlowEngine.newInstance(); flowEngine.load(Chain.parseByUri("classpath:flow/bookDiscount.yml")); BookOrder bookOrder = new BookOrder(); bookOrder.setOriginalPrice(10); ChainContext ctx = new ChainContext(); ctx.put("order", bookOrder); flowEngine.eval("book_discount", ctx); //价格没变,还是10块 assert bookOrder.getRealPrice() == 10; }
单测运行结果:
没有优惠
案例二
在原来的处理链上,添加新的规则
id: "book_discount" nodes: - id: "book_discount_1" when: "order.getOriginalPrice() < 100" task: | order.setRealPrice(order.getOriginalPrice()); System.out.println("没有优惠"); - id: "book_discount_4" when: "order.getOriginalPrice() >= 300" task: | order.setRealPrice(order.getOriginalPrice() - 100); System.out.println("优惠100元"); - id: "book_discount_2" when: "order.getOriginalPrice() < 200 && order.getOriginalPrice() > 100" task: | order.setRealPrice(order.getOriginalPrice() - 20); System.out.println("优惠20元");
流处理示意图:
单测参考:
@Test public void case4() throws Throwable { FlowEngine flowEngine = FlowEngine.newInstance(); flowEngine.load(Chain.parseByUri("classpath:flow/bookDiscount.yml")); BookOrder bookOrder = new BookOrder(); bookOrder.setOriginalPrice(500); ChainContext ctx = new ChainContext(); ctx.put("order", bookOrder); flowEngine.eval("book_discount", ctx); //价格变了,省了100块 assert bookOrder.getRealPrice() == 400; } @Test public void case2() throws Throwable { FlowEngine flowEngine = FlowEngine.newInstance(); flowEngine.load(Chain.parseByUri("classpath:flow/bookDiscount.yml")); BookOrder bookOrder = new BookOrder(); bookOrder.setOriginalPrice(120); ChainContext ctx = new ChainContext(); ctx.put("order", bookOrder); flowEngine.eval("book_discount", ctx); //省了20块 assert bookOrder.getRealPrice() == 100; }
内置脚本能力说明
- when,使用 java 完整语法的表达式,可以直接使用链上下文的模型变量,要求返回布尔值
- task,使用 java 完整语法的代码块,可以直接使用链上下文的模型变量
更多 solon-flow 的说明,可参考 solon-flow 官网资料。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
夸克 AI 搜索上线“深度思考”
阿里旗下夸克 APP 更新,版本更新内容显示,AI 搜索新增"深度思考模式",答案专业可信,复杂问题轻松解决。同时,还首次推出了 AI 生图功能。 根据介绍,夸克AI搜索“深度思考”,能够精准理解用户的真实需求和深层意图。针对用户的个性化和复杂问题,“深度思考”能够高效、极速地提供内容详尽、全面、可信任的结果,帮助用户找答案、做分析和写方案。
- 下一篇
阿里万相大模型登上全球开源榜首
Hugging Face最新榜单显示,开源仅6天的阿里万相大模型已反超DeepSeek-R1,登顶模型热榜、模型空间榜两大榜单,成为近期全球开源社区最受欢迎的大模型。 根据最新数据,万相2.1(Wan2.1)在Hugging Face及魔搭社区的总下载量已超百万,在Github的Star数超6k。 相关阅读: 阿里开源新一代 AI 视频模型通义万相 Wan2.1
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装Nodejs环境