QLExpress入门及实战总结

文章目录

    • 1.背景
    • 2.简介
    • 3.QLExpress实战
      • 3.1 基础例子
      • 3.2 低代码实战
        • 3.2.1 需求描述
        • 3.2.1 使用规则引擎
        • 3.3.2 运行结果
  • 参考文档

1.背景

最近研究低代码实现后端业务逻辑相关功能,使用LiteFlow作为流程编排后端service服务, 但是LiteFlow官方未提供图形界面编排流程。且LiteFlow语法对于,通过使用json来定义流程的可视化也不够友好(二开麻烦)。因此尝试使用LiteFlow底层使用的是QLExpress,来实现可视化逻辑编排。本文记录研究过程及其一些功能总结。

2.简介

什么是QLExpress脚本引擎?

QLExpress(Quick Language Express)是阿里巴巴开源的一门动态脚本引擎解析工具,起源于阿里巴巴的电商业务,旨在解决业务规则、表达式、数学计算等动态脚本的解析问题。

image.png

3.QLExpress实战

maven依赖配置

        <!--规则引擎-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>QLExpress</artifactId>
            <version>3.2.0</version>
        </dependency>

3.1 基础例子

ExpressRunner runner = new ExpressRunner();
DefaultContext<String, Object> context = new DefaultContext<String, Object>();
context.put("a", 1);
context.put("b", 2);
context.put("c", 3);
String express = "a + b * c";
Object r = runner.execute(express, context, null, true, false);
System.out.println(r);

3.2 低代码实战

模拟低代码中动态if功能

3.2.1 需求描述

要实现不硬编码,动态执行包含if的程序逻辑。必须使用声明式可复用数据结构,如下json定义

{
	"rule": {
        "condition": "age > 18",
        "actions": {
            "allow": "accessGranted",
            "deny": "accessDenied"
        }
    },
         
    "parameters": {
        "age": 20
    }
}
  • rule: 规则定义部分, 包含条件节点和执行节点
  • parameters: 定义参数部分,定义参数名称及默认值

执行过程:

  1. 低代码引擎解析规则部分,转化未低成脚本语言
  2. 读取从入参中读取流程变量配置,设置上下文
  3. 执行运算并获取结果

下面使用springboot项目具体实现

3.2.1 使用规则引擎
@Service
public class QLExpressTestService {
    
    public Map<String, Object> testIf(Map<String, Object > rule, Map<String, Object > parameters) throws Exception {
        // 根据 Map 对象动态生成 QLExpress 表达式
        String condition = (String) rule.get("condition");
        Map<String, String> actionsMap = (Map<String, String>) rule.get("actions");
        String allowAction = actionsMap.get("allow");
        String denyAction = actionsMap.get("deny");

        // 定义 allowAccess 和 denyAccess 方法
        String qlExpress = "function accessGranted() { return \"Access granted\"; }" +
                "function accessDenied() { return \"Access denied\"; }" +
                "if (" + condition + ") { result = " + allowAction + "; } else { result = " + denyAction + "; }";

        // 执行 QLExpress 表达式
        ExpressRunner runner = new ExpressRunner();
        DefaultContext<String, Object> context = new DefaultContext<>();
        context.put("age", parameters.getOrDefault("age", 20)); // 设置年龄为20岁
        Object result = runner.execute(qlExpress, context, null, true, false);
        System.out.println("Result: " + result);

        return Map.of("scriptContext", qlExpress, "result", result);
    }
}

3.3.2 运行结果

image.png

参考文档

  1. https://github.com/alibaba/QLExpress (官网)
  2. QLExpress学习使用总结-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/623928.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

穿越网络界限:探索NAT IPv4的神秘面纱

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 穿越网络界限&#xff1a;探索NAT IPv4的神秘面纱 前言NAT IPv4概述NAT IPv4的类型NAT IPv4的工作流程NAT IPv4的局限性和挑战 前言 在我们日常的网络使用中&#xff0c;我们或多或少都会遇到NAT&…

SAP:FI 财务凭证行项目文本前台修改

一、问题描述 财务凭证行项目文本点击修改&#xff0c;但是前台有的行可以修改&#xff0c;有的行是灰色的不能修改&#xff0c;如下图所示&#xff0c;这个文本信息有误&#xff0c;必须修改怎么办&#xff1f; 二、思路分析 有的行可以修改&#xff0c;有的行不能修改&#x…

【MySQL数据库】初步认识数据库,实现基本操作

在信息爆炸的今天&#xff0c;数据无处不在&#xff0c;它们构成了互联网世界的基石。但数据本身若未经有效组织和管理&#xff0c;就如同散落在沙滩上的珍珠&#xff0c;难以发挥其真正的价值。这时&#xff0c;“数据库”这一概念便如同一根线&#xff0c;将这些珍珠串联起来…

position:fixed无法固定到父盒子上面的解决方案

目录 问题如图所示&#xff1a; 下面是错误的代码&#xff1a; 解决方案1&#xff1a; 使用fixed固定定位固定到父元素&#xff1a; 解决方案2&#xff1a; 推荐使用的其他方案&#xff08;粘性定位&#xff09;&#xff1a; 什么是粘性定位&#xff1a; 粘性定位的使用…

答辩PPT设计太耗时?aippt工具,AI一站式服务

这些网站我愿称之为制作答辩PPT的神&#xff01; 很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路&#xff0c;一窍不通。但这并不是你们的错&#xff0c;对于平时没接触过相关方面&#xff0c;第一次搞答辩PPT的人来说&#xff0c;这是很正常的一件事。一个好的答辩PPT…

搞懂Docker(九)- 使用Docker Compose

获取示例程序 示例程序 或者 示例程序 获取示例程序程序结构如下├── getting-started-app/ │ ├── package.json │ ├── README.md │ ├── spec/ │ ├── src/ │ └── yarn.lock使用Docker Compose Docker Compose是一个帮助你定义和共享多容器应用程序的工具…

在线数据库设计工具drawDB

什么是 DrawDB &#xff1f; DrawDB 是浏览器中强大且用户友好的数据库实体关系&#xff08;DBER&#xff09;编辑器。只需点击几下即可构建图表、导出 SQL 脚本、自定义编辑器等等&#xff0c;无需创建帐户。 软件特点&#xff1a; DrawDB 是完全免费的无需注册或登录。只需投…

19.接口自动化-Jekins学习

1.CI-持续集成 频繁的&#xff08;一天多次&#xff09;将代码集成到主干 目的&#xff1a;让产品快速迭代&#xff0c;保持高质量 好处&#xff1a; 快速发现错误&#xff0c;每次更新都集成到主干&#xff0c;可以快速发现错误&#xff0c;定位错误也容易防止分支大幅偏离主…

字符串取第一个空格之后的所有的值字符串取第一个空格之后的第二个元素的值,不要后面的值

当我们后端返回值可能存在某些特定的值或标识导致返回数据不固定且是空格分割时&#xff0c;我们想取出返回字符串中的某个值&#xff0c;就可以参考下面对这个字符串进行操作提取&#xff0c;当然&#xff0c;如果是别的符号分割开的把下面的空格替换即可 1、字符串取第一个空…

C语言笔记14

指针1 在C语言中给内存单元的编号起了个名字叫做指针&#xff0c;通俗来说就是地址。&#xff08;内存单元编号地址指针&#xff09; 1.指针变量与地址 int a10&#xff1b; int* p&a&#xff1b; * 说明了这里p的是指针变量&#xff1b;int*说明p是一个整形指针&…

SpringBoot 实现对提供的接口进行 AES (加密,解密)

业务来源&#xff1a; 最近工作中&#xff0c;领导要求给别的项目组的小伙伴提供几个接口&#xff0c;要求对接口的参数进行解密操作&#xff0c;然后对返回的数据进行加密操作。 这时我想到了AES AES 是对称加密算法&#xff0c;优点&#xff1a;加密速度快&#xff1b;缺点…

生产环境磁盘变更方案

datanode磁盘扩容(1人天) 扩容磁盘 1.1 扩容前检查、新盘初始化 确定block副本统计正常,无丢块,无under-replicated 块 后台执行命令检查 hdfs dfs fsck / 无异常可进行以下步骤进行磁盘扩容 新盘初始化 ##格式化新盘,命令示例: mkfs.xfs /dev/sdc##挂载新盘,命令示…

哔哩哔哩直播通用榜单系统

榜单系统的定位和业务价值 榜单遍布B站直播相关业务的各个角落&#xff0c;直播打赏、直播间互动、付费玩法、互动玩法、活动、主播PK、语聊房、人气主播排名、高价值用户排名、增值集卡、up主充电等等&#xff0c;在这众多的业务场景中&#xff0c;我们能看到各种各样的榜单。…

Allegro如何输出各层PCB视图的PDF文件

如何输出各层PCB视图的PDF文件 1、说明 用Allegro设计好PCB后&#xff0c;有时需要出各层的PDF文档出来进行汇报和展示&#xff0c;这时就需要将各层的平面视图全部以PDF的形式加载出来&#xff0c;具体方法如下。 2、PDF文件的输出方法&#xff08;以四层板为例&#xff09; …

网上跳蚤市场|基于SSM+vue的网上跳蚤市场系统的设计与实现(源码+数据库+文档)

网上跳蚤市场系统 目录 基于SSM&#xff0b;vue的网上跳蚤市场系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2后台登录模块 5.2.1管理员功能 5.2.2会员功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八…

如何内网穿透,远程访问内网设备

文章目录 0.前言1.准备工作2.内网穿透原理3.配置公网服务器的frp5.配置访问内网主机6.配置win10的远程桌面访问&#xff08;win11类似&#xff09;7.参考资料 0.前言 最近想研究一些新东西&#xff0c;公司的机器不敢乱搞&#xff0c;公司测试的服务器安装软件太多&#xff0c…

SQL Server服务启动缓慢或崩溃问题分析

关键词&#xff1a;SQL Server故障解决、服务启动缓慢、服务崩溃、日志文件清理 阅读建议&#xff1a;如果您遇到的是SQL Server服务启动缓慢或无法响应的问题&#xff0c;可以重点阅读文章的第一部分&#xff1b;如果是服务崩溃或重启的问题&#xff0c;可以重点关注第二部分。…

React 第三十章 React 和 Vue 描述页面的区别

面试题&#xff1a;React 和 Vue 是如何描述 UI 界面的&#xff1f;有一些什么样的区别&#xff1f; 标准且浅显的回答&#xff1a; React 中使用的是 JSX&#xff0c;Vue 中使用的是模板来描述界面 前端领域经过长期的发展&#xff0c;目前有两种主流的描述 UI 的方案&#xf…

如何在 Linux 上检查 CPU 和硬盘温度

为了更好地监测您的Linux系统的硬件健康状况&#xff0c;如CPU与硬盘温度、风扇转速等关键指标&#xff0c;采用lm_sensors与hddtemp这两款强大工具是明智之选。以下是关于这些工具的详尽指南&#xff0c;包括它们的功能介绍、安装步骤以及如何配置lm_sensors&#xff0c;旨在为…

C++的相关知识集

1、C概述 1 两大编程思想 c语言在c语言的基础上添加了面向对象编程和泛型编程的支持。c继承了c语言高效&#xff0c;简洁&#xff0c;快速和可移植的传统。 2 起源 与c语言一样&#xff0c;c也是在贝尔实验室诞生的&#xff0c;Bjarne Stroustrup(本贾尼斯特劳斯特卢普)在2…