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博客

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用RAG和文本转语音功能,我构建了一个 QA 问答机器人

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

代码随想录算法训练营第36期DAY37

DAY37 先二刷昨天的3道题目&#xff0c;每种方法都写&#xff1a;是否已完成&#xff1a;是。 报告&#xff1a;134加油站的朴素法没写对。原因是&#xff1a;在if中缺少了store>0的判断&#xff0c;只给出了indexi的判断。前进法没写出来。因为忘记了总油量的判断。Sum。…

基于springboot图书个性化推荐系统源码数据库

基于springboot图书个性化推荐系统源码数据库 本论文主要论述了如何使用JAVA语言开发一个图书个性化推荐系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述图…

K8s 运维架构师实战课程

阿良课程收益 掌握Kubernetes企业运维管理 掌握部署、运维、存储、网络、监控、日志、CICD、服务网格等实战全面搞定&#xff01; 独立将公司任何项目容器化迁移到K8s平台 生产环境真实案例 大厂企业实战经验 学习最新版、最佳实践 K8s 运维架构师实战【初中级】&#xff1a;ht…

docker 方式gost代理搭建以及代理链实施

一、项目地址&#xff1a;https://github.com/ginuerzh/gost 二、实施 环境信息 主机名公网IP地址内网IP地址角色beijing101.200.xxx.xxx192.168.0.160单层代理serverbeijing101.200.xxx.xxx192.168.0.160链式代理下游serverhk47.238.xxx.xxx172.31.94.207链式代理上游serve…

linux误删crontab定时任务后的补救措施(随手记)

起因 想看一眼定时任务的时候&#xff0c;手误打成了-r&#xff0c;接着我的定时任务就全没了…… 补救措施 我们都知道&#xff0c;crontab的几个关键目录中有一个是/var/log/cron&#xff0c;这个目录记录了crontab执行的日志。 如果平时没有备份crontab的习惯的话&#x…

【MySQL精通之路】InnoDB-内存结构-自适应哈希索引

1.作用 自适应哈希索引使InnoDB能够在具有适当的工作负载组合和足够的缓冲池内存的系统上执行更像内存中的数据库&#xff0c;而不会牺牲事务特性或可靠性。 2.设置 自适应哈希索引由innodb_adaptive_hash_index变量启用 或在服务器启动时由--skip-innodb-adaptive-has…

VMware 安装Windows Server 2008 R2

1.下载镜像 迅雷&#xff1a;ed2k://|file|cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_x64_dvd_617598.iso|3368839168|D282F613A80C2F45FF23B79212A3CF67|/ 2.安装过程 自定义名字&#xff0c;点击【浏览】选择安装路径 点击【浏览】选择前…

鸿蒙应用开发系列 篇三:ArkTS语言

文章目录 系列文章概述基本语法基本结构概念释疑声明式UI描述高级特性自定义组件页面和自定义组件生命周期状态管理渲染控制ArkTS语言基础类库系列文章 鸿蒙应用开发系列 篇一:鸿蒙系统概述 鸿蒙应用开发系列 篇二:鸿蒙系统开发工具与环境

(Oracle)SQL优化基础(三):看懂执行计划顺序

往期内容&#xff1a; &#xff08;Oracle&#xff09;SQL优化基础&#xff08;一&#xff09;&#xff1a;获取执行计划 &#xff08;Oracle&#xff09;SQL优化基础&#xff08;二&#xff09;&#xff1a;统计信息 获取到执行计划后&#xff0c;对于新手朋友来讲可能不知道…

Qt笔记:动态处理多个按钮点击事件以更新UI

问题描述 在开发Qt应用程序时&#xff0c;经常需要处理多个按钮的点击事件&#xff0c;并根据点击的按钮来更新用户界面&#xff08;UI&#xff09;&#xff0c;如下图。例如&#xff0c;你可能有一个包含多个按钮的界面&#xff0c;每个按钮都与一个文本框和一个复选框相关联…

基于springboot+vue+Mysql的逍遥大药房管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

Flutter 中的 FormField 小部件:全面指南

Flutter 中的 FormField 小部件&#xff1a;全面指南 在Flutter的世界里&#xff0c;表单是用户输入数据的基本方式之一。FormField是一个强大的小部件&#xff0c;它将表单字段的创建、验证和管理集成到了一个易于使用的抽象中。本文将为您提供一个全面的指南&#xff0c;帮助…

AWS安全性身份和合规性之AWS Firewall Manager

AWS Firewall Manager是一项安全管理服务&#xff0c;可让您在AWS Organizations中跨账户和应用程序集中配置和管理防火墙规则。在创建新应用程序时&#xff0c;您可以借助Firewall Manager实施一套通用的安全规则&#xff0c;更轻松地让新应用程序和资源从一开始就达到合规要求…

【flutter】 Running Gradle task ‘assembleDebug‘...超时问题

关联搜索&#xff1a;flutter下载gradle失败、AndroidStudio下载gradle失败 构建Flutter项目时遇到控制台一直卡在 Running Gradle task ‘assembleDebug’… 解决方案 1. 修改gradle-wrapper.properties 文件 如果找不到就直接搜索&#xff1a; 把https\://services.gradl…

vscode更改语言,记录一下

首先打开安装好的Vscode软件&#xff0c;可以看到页面上显示的是英文效果。 同时按键ctrlshiftp&#xff0c;接着在输入框中输入 configure Display language如图&#xff1a; 选择中文简体就ok了&#xff0c;如果没有则安装 chinese Language pack

大模型日报2024-05-23

大模型日报 2024-05-23 大模型资讯 减少生成型AI和大型语言模型中的幻觉现象 摘要: Phocuswright即将发布全面报告《从流行词到实际效益&#xff1a;跟上旅游业中生成型AI的步伐》。该报告预览指出&#xff0c;降低生成型人工智能及大型语言模型在生成内容时出现的幻觉现象是行…

git二次上传文件夹、文件

主要记录自己遇到的问题。 一、报错error:failed to push somes ref to..... 报错&#xff1a;error the following untracked working tree files would be overwritten bt merge... 把报错的&#xff08;重复的文件删除&#xff09; git init git add -f 文件夹/文件名…

vue 使用iView组件中的Table实现定时自动滚动

封装Table 要在css中设置table的高度&#xff0c;使数据过多时出现滚动条&#xff0c;将纵向设置为overflow-y: auto;横向设置隐藏 overflow-x: hidden; <template><div class"table_container"><Table :loading"tableLoading" :columns&qu…

vue3 ElementUI 日期禁选当日前, 当日后,几天后,几天前(例如3天后)

今日之前禁用 代码: ( 主要是 :disabledDate“disabledDateFun” ) <el-date-picker v-model"queryForm.selectedDate"type"date"range-separator"-"placeholder"选择日期":disabledDate"disabledDateFun" clearable /&…