国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java動(dòng)態(tài)腳本&規(guī)則引擎、計(jì)算/表達(dá)式引擎

這篇具有很好參考價(jià)值的文章主要介紹了Java動(dòng)態(tài)腳本&規(guī)則引擎、計(jì)算/表達(dá)式引擎。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 常見的使用場(chǎng)景

在日常的Java項(xiàng)目中,我們免不了會(huì)遇到這樣的需求:

  1. 動(dòng)態(tài)地獲取并運(yùn)行自定義腳本文件,以實(shí)現(xiàn)特定的功能
  2. 對(duì)數(shù)據(jù)流執(zhí)行用戶自定義的數(shù)據(jù)有效性、公式計(jì)算、數(shù)據(jù)處理ETL(如數(shù)據(jù)截取、拼接)等不同業(yè)務(wù)邏輯
  3. 對(duì)用戶輸入的代碼或腳本文件進(jìn)行測(cè)試、運(yùn)行,確保其語法正確、功能正常
  4. 處理需要靈活配置且不斷變更的動(dòng)態(tài)業(yè)務(wù)規(guī)則
  5. 代碼的熱更新、熱修復(fù)

諸如此類的需求若采用硬編碼實(shí)現(xiàn),則迭代成本相當(dāng)高,每次改動(dòng)都需要進(jìn)行開發(fā)、測(cè)試、部署。同時(shí)業(yè)務(wù)規(guī)則的頻繁變更會(huì)導(dǎo)致代碼的開發(fā)和維護(hù)成本大大提高。

2. Java動(dòng)態(tài)腳本常見的實(shí)現(xiàn)方式

2.1 動(dòng)態(tài)編譯執(zhí)行Java代碼

2.2 通過Java腳本引擎執(zhí)行不同類型的腳本

  • JavaScript

  • Groovy

  • Python

  • Lua

  • Ruby

  • Scala

以上腳本語言可根據(jù)項(xiàng)目實(shí)際需求、對(duì)不同腳本語言的掌握情況出發(fā)進(jìn)行選擇。

一般的需求可使用上述動(dòng)態(tài)腳本實(shí)現(xiàn),如果遇到業(yè)務(wù)規(guī)則更為復(fù)雜、規(guī)模更大、對(duì)功能和性能有更高要求的需求時(shí),可考慮更為專業(yè)的規(guī)則引擎和計(jì)算/表達(dá)式引擎。

3 進(jìn)階:規(guī)則引擎&計(jì)算/表達(dá)式引擎

3.1 規(guī)則引擎

規(guī)則引擎由推理引擎發(fā)展而來,是一種嵌入在應(yīng)用程序中的組件,實(shí)現(xiàn)了將業(yè)務(wù)決策從應(yīng)用程序代碼中分離出來,并使用預(yù)定義的語義模塊編寫業(yè)務(wù)決策。接受數(shù)據(jù)輸入,解釋業(yè)務(wù)規(guī)則,并根據(jù)業(yè)務(wù)規(guī)則做出業(yè)務(wù)決策。

分離商業(yè)決策者的商業(yè)決策邏輯和應(yīng)用開發(fā)者的技術(shù)決策

  • Drools (推薦)
  • OpenRules
  • EasyRules
  • OpenL Tablets
  • RuleBook
  • Esper

3.2 計(jì)算/表達(dá)式引擎

表達(dá)式(布爾組合)、特殊數(shù)學(xué)公式計(jì)算(高精度)、語法分析、腳本二次定制

  • Fel
  • OGNL
  • Mvel
  • SpEL
  • JEXL
  • JSEL
  • Aviator
  • Expression4j
  • QLExpress

4. 使用動(dòng)態(tài)腳本及上述引擎的優(yōu)點(diǎn)

  • 邏輯和數(shù)據(jù)隔離
  • 可擴(kuò)展性高
  • 可維護(hù)性高
  • 知識(shí)集中化
  • 提高業(yè)務(wù)靈活性
  • 業(yè)務(wù)透明度增強(qiáng)
  • 減少系統(tǒng)頻繁迭代升級(jí)風(fēng)險(xiǎn)
  • 簡(jiǎn)化系統(tǒng)架構(gòu)

5. 使用動(dòng)態(tài)腳本常見的問題及解決方案

5.1. 安全問題

  • 提供常見的腳本文件供用戶選擇(系統(tǒng)提供的腳本文件更規(guī)范、更安全、性能更好)
  • 設(shè)置腳本編寫規(guī)范及模板
  • 對(duì)用戶提交的腳本做健康檢查(如對(duì)Threadreflect、truncate等關(guān)鍵詞進(jìn)行檢查,做提示確認(rèn)或拒絕通過)
  • 對(duì)腳本進(jìn)行版本管理,可對(duì)腳本做回滾處理
  • 對(duì)腳本設(shè)置審核機(jī)制
  • 可根據(jù)實(shí)際情況考慮是否對(duì)用戶的腳本執(zhí)行進(jìn)行進(jìn)程或線程隔離

5.2 OOM問題

Java執(zhí)行動(dòng)態(tài)腳本的過程往往會(huì)產(chǎn)生很多對(duì)象,而同一個(gè)腳本沒必要每次執(zhí)行時(shí)都去獲取、編譯、執(zhí)行??稍O(shè)計(jì)緩存策略,對(duì)編譯后的腳本引擎進(jìn)行緩存,既可避免頻繁創(chuàng)建對(duì)象引起的內(nèi)存溢出問題,又可提高性能文章來源地址http://www.zghlxwxcb.cn/news/detail-426530.html


  • 如果這篇文章對(duì)你有用的話,點(diǎn)個(gè)再走唄!
  • 如有問題,歡迎留言評(píng)論!
  • 歡迎轉(zhuǎn)載,煩請(qǐng)注明出處!

到了這里,關(guān)于Java動(dòng)態(tài)腳本&規(guī)則引擎、計(jì)算/表達(dá)式引擎的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • jexl3動(dòng)態(tài)計(jì)算表達(dá)式

    Java Expression Language (JEXL) 是一個(gè)表達(dá)式語言引擎,可以用來在應(yīng)用或者框架中使用。JEXL 受Velocity 和 JSP 標(biāo)簽庫(kù) 1.1 (JSTL) 的影響而產(chǎn)生的。需要注意的是, JEXL 并不是 JSTL 中的表達(dá)式語言的實(shí)現(xiàn)。 實(shí)時(shí)引擎里 動(dòng)態(tài)邏輯計(jì)算分離 計(jì)算邏輯經(jīng)常變化或者可視化邏輯配置 引入JAR包

    2024年02月11日
    瀏覽(20)
  • 【java表達(dá)式引擎】四、高性能、輕量級(jí)的AviatorScript

    github:(https://github.com/killme2008/aviatorscript%60) 參考文檔1:https://www.yuque.com/boyan-avfmj/aviatorscript 參考博客2:https://blog.csdn.net/ZhangQingmu/article/details/125087255 Aviator起源于2011年,由國(guó)內(nèi)的開發(fā)者開源的,表達(dá)式引擎 表達(dá)式引擎當(dāng)時(shí)國(guó)內(nèi)開源的已經(jīng)有 IKExpression,可惜是純解釋執(zhí)行的,

    2024年02月10日
    瀏覽(20)
  • Java:正則表達(dá)式書寫規(guī)則及相關(guān)案例:檢驗(yàn)QQ號(hào)碼,校驗(yàn)手機(jī)號(hào)碼,郵箱格式,當(dāng)前時(shí)間

    Java:正則表達(dá)式書寫規(guī)則及相關(guān)案例:檢驗(yàn)QQ號(hào)碼,校驗(yàn)手機(jī)號(hào)碼,郵箱格式,當(dāng)前時(shí)間

    目標(biāo):體驗(yàn)一下使用正則表達(dá)式來校驗(yàn)數(shù)據(jù)格式的合法性。 需求:校驗(yàn)QQ號(hào)碼是否正確,要求全部是數(shù)字,長(zhǎng)度是(6-20)之間,不能以0開頭

    2024年02月12日
    瀏覽(105)
  • Java中使用MapStruct實(shí)現(xiàn)對(duì)象轉(zhuǎn)換時(shí)使用@Mapping的expression表達(dá)式實(shí)現(xiàn)自定義轉(zhuǎn)換規(guī)則(多對(duì)一、獲取當(dāng)前Date)

    Java中使用MapStruct實(shí)現(xiàn)對(duì)象轉(zhuǎn)換/實(shí)體屬性賦值/Bean屬性映射,避免大量setter和getter: Java中使用MapStruct實(shí)現(xiàn)對(duì)象轉(zhuǎn)換/實(shí)體屬性賦值/Bean屬性映射,避免大量setter和getter_霸道流氓氣質(zhì)的博客-CSDN博客 上面介紹了mapstruct的簡(jiǎn)單使用,某些場(chǎng)景下需要自定義轉(zhuǎn)換規(guī)則,比如記錄時(shí)間字

    2024年02月14日
    瀏覽(23)
  • 計(jì)算數(shù)學(xué)表達(dá)式的程序(Java課程設(shè)計(jì))

    計(jì)算數(shù)學(xué)表達(dá)式的程序(Java課程設(shè)計(jì))

    團(tuán)隊(duì)名稱 團(tuán)隊(duì)成 員介紹 任務(wù)分配 團(tuán)隊(duì)成員博客 XQ Warriors 徐維輝 負(fù)責(zé)計(jì)算器數(shù)據(jù)的算法操作,如平方數(shù)、加減乘除,顯示歷史計(jì)算記錄 無 邱良廈(組長(zhǎng)) 負(fù)責(zé)計(jì)算器的圖形設(shè)計(jì),把輸入和結(jié)果顯示在最上面的文本框 無 1)圖形界面設(shè)計(jì)參考:Java Swing界面設(shè)計(jì)UI(全)_sw

    2024年01月21日
    瀏覽(17)
  • cron表達(dá)式語法規(guī)則及常見示例

    cron表達(dá)式最初是由Unix操作系統(tǒng)中的cron守護(hù)進(jìn)程所使用的一種語法規(guī)則,用于設(shè)置定時(shí)任務(wù)。cron守護(hù)進(jìn)程是Unix系統(tǒng)中的一個(gè)后臺(tái)進(jìn)程,用于周期性地執(zhí)行指定的命令或腳本。它可以根據(jù)用戶的需求,按照指定的時(shí)間間隔或時(shí)間點(diǎn)來執(zhí)行任務(wù),通常用于定時(shí)備份、清理日志、

    2024年02月09日
    瀏覽(49)
  • Java中Cron表達(dá)式的生成解析和計(jì)算的工具類

    Java中Cron表達(dá)式的生成解析和計(jì)算的工具類

    本文介紹通過java生成cron表達(dá)式,解析表達(dá)式,計(jì)算表達(dá)式執(zhí)行日期 需要引入quartz依賴 gitee地址:

    2024年02月07日
    瀏覽(23)
  • Java算法題 給一個(gè)字符串表達(dá)式,實(shí)現(xiàn)一個(gè)基本計(jì)算器,返回計(jì)算結(jié)果

    題目: 考點(diǎn):棧 解題思路: 使用 2 個(gè)棧,一個(gè) stack_nums 用來保存計(jì)算過程的操作數(shù),一個(gè) stack_symbol 用來保存運(yùn)算符。 在HashMap中,指定加減優(yōu)先級(jí)為1,乘除優(yōu)先級(jí)為2 循環(huán)遍歷字符串s, 操作符入棧: 若當(dāng)前字符為\\\'+\\\', \\\'-\\\', \\\'*\\\', \\\'/\\\', \\\'(\\\' 時(shí),壓入運(yùn)算符棧 stack_symbol, 操作數(shù)入

    2024年02月07日
    瀏覽(18)
  • 【尚硅谷】數(shù)據(jù)結(jié)構(gòu)和算法——前綴、中綴、后綴表達(dá)式規(guī)則

    【尚硅谷】數(shù)據(jù)結(jié)構(gòu)和算法——前綴、中綴、后綴表達(dá)式規(guī)則

    跟著B站的尚硅谷學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法,語言為java,目前是第七個(gè)代碼內(nèi)容——前綴、中綴、后綴表達(dá)式 課程傳送門:尚硅谷——前綴、中綴、后綴表達(dá)式 1)前綴表達(dá)式又稱波蘭式, 前綴表達(dá)式 的運(yùn)算符位于操作符之前。 2)舉例說明:(3+4)*5-6 對(duì)應(yīng)的前綴表達(dá)式就是 - *

    2024年02月03日
    瀏覽(20)
  • shell腳本正則表達(dá)式

    shell腳本正則表達(dá)式

    聲明: 以下內(nèi)容為個(gè)人筆記,內(nèi)容不完全正確,請(qǐng)謹(jǐn)慎參考。 含義: 正則表達(dá)式使用的每個(gè)單獨(dú)字符串來描述、匹配一些列符合語法規(guī)則的字符串。在很多文本編輯器里,正則表達(dá)式通常被用來檢索、替換那些符合某個(gè)模式的文本。在Linux中,grep,sed,awk等文本處理工具都支

    2024年04月22日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包