您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“SpringBoot項(xiàng)目中如何使用Groovy腳本”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“SpringBoot項(xiàng)目中如何使用Groovy腳本”這篇文章吧。
最近項(xiàng)目中遇到了這樣的需求:需要檢查一個表的某些字段,是否為空,或者是否符合預(yù)期規(guī)則:比如大于0,或者在某個范圍內(nèi)??紤]將表名和字段名配置在數(shù)據(jù)庫中,然后規(guī)則使用Groovy來寫,比較靈活。
<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>
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)目初始化的時候生成,不需要每次調(diào)用都再去生成一個。
通過debug知道,在ScriptEngine內(nèi)部有個map會緩存曾經(jīng)執(zhí)行過的腳本,所以性能方面也不需要擔(dān)心。
Groovy語法參考
使用這種方式的好處是什么?
方便:有新的表需要檢查字段的時候,加配置就可以,減少工作量;簡單的規(guī)則可以直接通過Groovy腳本實(shí)現(xiàn),規(guī)則改變時可以很快的修改。
成本低:Groovy語法和Java很像,不需要付出太大的學(xué)習(xí)成本。
為什么不使用規(guī)則引擎?
這不是個復(fù)雜的需求,現(xiàn)階段沒必要引入規(guī)則引擎也可以很好的完成需求。引入規(guī)則引擎會增加更多成本,但效果是差不多的。
Java使用GroovyClassLoader動態(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; } }
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}"
以上是“SpringBoot項(xiàng)目中如何使用Groovy腳本”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。