最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot項(xiàng)目中使用Groovy腳本的示例代碼

 更新時(shí)間:2021年08月27日 09:13:59   作者:側(cè)耳傾聽(tīng)nomorebb  
本文主要介紹了SpringBoot項(xiàng)目中使用Groovy腳本的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近項(xiàng)目中遇到了這樣的需求:需要檢查一個(gè)表的某些字段,是否為空,或者是否符合預(yù)期規(guī)則:比如大于0,或者在某個(gè)范圍內(nèi)??紤]將表名和字段名配置在數(shù)據(jù)庫(kù)中,然后規(guī)則使用Groovy來(lái)寫(xiě),比較靈活。

1. 引入依賴(lài)

       <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy</artifactId>
            <version>2.5.5</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-jsr223</artifactId>
            <version>2.5.5</version>
        </dependency>

2. 使用腳本引擎運(yùn)行g(shù)roovy腳本

ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("groovy");
// 變量
Bindings bindings = engine.createBindings();
bindings.put("value", 10);
// groovy腳本
String scriptStr = "if (value == null) { return false}\n if (value <= 0) {return false} else { return true}";
// 執(zhí)行腳本
Object res = engine.eval(scriptStr, bindings);

在實(shí)際項(xiàng)目中,可以把ScriptEngine engine在項(xiàng)目初始化的時(shí)候生成,不需要每次調(diào)用都再去生成一個(gè)。

通過(guò)debug知道,在ScriptEngine內(nèi)部有個(gè)map會(huì)緩存曾經(jīng)執(zhí)行過(guò)的腳本,所以性能方面也不需要擔(dān)心。

Groovy語(yǔ)法參考

3.思考

使用這種方式的好處是什么?

  • 方便:有新的表需要檢查字段的時(shí)候,加配置就可以,減少工作量;簡(jiǎn)單的規(guī)則可以直接通過(guò)Groovy腳本實(shí)現(xiàn),規(guī)則改變時(shí)可以很快的修改。
  • 成本低:Groovy語(yǔ)法和Java很像,不需要付出太大的學(xué)習(xí)成本。

為什么不使用規(guī)則引擎?

這不是個(gè)復(fù)雜的需求,現(xiàn)階段沒(méi)必要引入規(guī)則引擎也可以很好的完成需求。引入規(guī)則引擎會(huì)增加更多成本,但效果是差不多的。

SpringBoot+Groovy運(yùn)行動(dòng)態(tài)腳本

GroovyClassLoader方式

Java使用GroovyClassLoader動(dòng)態(tài)加載Groovy腳本,調(diào)用腳本中的方法

在java中調(diào)用test.groovy腳本文件

            ClassLoader parent = this.getClass().getClassLoader();
            GroovyClassLoader loader = new GroovyClassLoader(parent);
            Class groovyClass = loader.parseClass(
                    new File("src/main/java/com/example/demo/groovyscript/test.groovy")
            );
            GroovyObject groovyObject= (GroovyObject)groovyClass.newInstance();
            String result = (String) groovyObject.invokeMethod("test", id);

Groovy

test.groovy腳本文件

package com.example.demo.groovyscript

class MyTest{
    static String test(String id){
        return "test1 id:"+ id;
    }
}

GroovyScriptEngine方式

java使用GroovyScriptEngine腳本引擎加載Groovy腳本

方法調(diào)用

在java中調(diào)用test.groovy腳本文件

            GroovyScriptEngine engine = new GroovyScriptEngine("src/main/java/com/example/demo/groovyscript");
            Script script = engine.createScript("test.groovy", new Binding());
            return (String) script.invokeMethod("test",id);

Groovy

test.groovy腳本文件

package com.example.demo.groovyscript

def test(id){
    return "test2 id:"+ id;
}

變量綁定

在java中調(diào)用test.groovy腳本文件

            GroovyScriptEngine engine = new GroovyScriptEngine("src/main/java/com/example/demo/groovyscript");
            Binding binding = new Binding();
            binding.setVariable("id",id);
            engine.run("test.groovy",binding);
            return binding.getVariable("output").toString();

Groovy

test.groovy腳本文件

package com.example.demo.groovyscript

output = "test3 id: ${id}"

到此這篇關(guān)于SpringBoot項(xiàng)目中使用Groovy腳本的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot使用Groovy腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java正則表達(dá)式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java正則表達(dá)式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    什么是正則表達(dá)式,正則表達(dá)式的作用是什么?這篇文章主要為大家詳細(xì)介紹了Java正則表達(dá)式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • intellij idea的快速配置使用詳細(xì)教程

    intellij idea的快速配置使用詳細(xì)教程

    這篇文章主要介紹了intellij idea的快速配置使用詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • idea中寫(xiě)sql語(yǔ)句沒(méi)有提示字段的問(wèn)題

    idea中寫(xiě)sql語(yǔ)句沒(méi)有提示字段的問(wèn)題

    在IDEA中編寫(xiě)SQL時(shí)如果沒(méi)有字段提示,通常是因?yàn)闆](méi)有設(shè)置注入語(yǔ)言,解決方法是通過(guò)快捷鍵Alt+Enter選擇“注入語(yǔ)言或引用”,然后選擇相應(yīng)的數(shù)據(jù)庫(kù)(如MySQL),之后重新輸入SQL語(yǔ)句即可,此方法可以有效解決IDEA中SQL語(yǔ)句提示問(wèn)題,提高開(kāi)發(fā)效率
    2024-09-09
  • 快速定位Java 內(nèi)存OOM的問(wèn)題

    快速定位Java 內(nèi)存OOM的問(wèn)題

    這篇文章主要介紹了快速定位Java 內(nèi)存OOM的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • JAVA中IP和整數(shù)相互轉(zhuǎn)化的方法

    JAVA中IP和整數(shù)相互轉(zhuǎn)化的方法

    這篇文章主要介紹了JAVA中IP和整數(shù)相互轉(zhuǎn)化的方法,涉及java數(shù)值轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • java如何交換這兩個(gè)變量的值方法介紹

    java如何交換這兩個(gè)變量的值方法介紹

    在編程中可能會(huì)使用java來(lái)完成兩個(gè)變量值的交換,本文將介紹如何解決此類(lèi)問(wèn)題,希望可以幫助您
    2012-11-11
  • JAVA位運(yùn)算的知識(shí)點(diǎn)總結(jié)

    JAVA位運(yùn)算的知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于JAVA有關(guān)位運(yùn)算的全套梳理,需要的朋友們可以參考學(xué)習(xí)下。
    2020-03-03
  • htmlcleaner使用方法及xpath語(yǔ)法初探

    htmlcleaner使用方法及xpath語(yǔ)法初探

    HtmlCleaner是一個(gè)開(kāi)源的Java語(yǔ)言的Html文檔解析器。HtmlCleaner能夠重新整理HTML文檔的每個(gè)元素并生成結(jié)構(gòu)良好(Well-Formed)的 HTML 文檔
    2015-08-08
  • 一文帶你了解Spring中Bean名稱(chēng)加載機(jī)制

    一文帶你了解Spring中Bean名稱(chēng)加載機(jī)制

    這篇文章主要給大家介紹了Spring Framework如何從使用注解定義的Bean元數(shù)據(jù)中獲取到Bean的名稱(chēng),文中通過(guò)代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-01-01
  • 如何提高java代碼的重用性

    如何提高java代碼的重用性

    在本篇文章中小編給各位分享了關(guān)于如何提高java代碼的重用性的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們參考下。
    2019-07-07

最新評(píng)論

嘉善县| 游戏| 永福县| 龙南县| 三亚市| 东明县| 泾源县| 望江县| 额济纳旗| 古田县| 张掖市| 茌平县| 桃源县| 即墨市| 讷河市| 永春县| 茶陵县| 泌阳县| 高青县| 黔西| 澄江县| 韶山市| 寻甸| 鲁甸县| 开原市| 钟山县| 宁乡县| 玛沁县| 镇巴县| 尤溪县| 德阳市| 双牌县| 镇安县| 昌宁县| 搜索| 连江县| 资阳市| 桃园县| 天长市| 全南县| 龙泉市|