您好,登录后才能下订单哦!
这篇文章主要为大家展示了“SpringBoot项目中如何使用Groovy脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot项目中如何使用Groovy脚本”这篇文章吧。
最近项目中遇到了这样的需求:需要检查一个表的某些字段,是否为空,或者是否符合预期规则:比如大于0,或者在某个范围内。考虑将表名和字段名配置在数据库中,然后规则使用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}"; // 执行脚本 Object res = engine.eval(scriptStr, bindings);
在实际项目中,可以把ScriptEngine engine在项目初始化的时候生成,不需要每次调用都再去生成一个。
通过debug知道,在ScriptEngine内部有个map会缓存曾经执行过的脚本,所以性能方面也不需要担心。
Groovy语法参考
使用这种方式的好处是什么?
方便:有新的表需要检查字段的时候,加配置就可以,减少工作量;简单的规则可以直接通过Groovy脚本实现,规则改变时可以很快的修改。
成本低:Groovy语法和Java很像,不需要付出太大的学习成本。
为什么不使用规则引擎?
这不是个复杂的需求,现阶段没必要引入规则引擎也可以很好的完成需求。引入规则引擎会增加更多成本,但效果是差不多的。
Java使用GroovyClassLoader动态加载Groovy脚本,调用脚本中的方法
在java中调用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脚本
方法调用
在java中调用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中调用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项目中如何使用Groovy脚本”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。