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.pswp.cn/diannao/13923.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13923.shtml
英文地址,請注明出處:http://en.pswp.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 /&…