SpringBoot项目中使用Groovy脚本的示例代码

网友投稿 1728 2022-12-14

SpringBoot项目中使用Groovy脚本的示例代码

SpringBoot项目中使用Groovy脚本的示例代码

目录1. 引入依赖2. 使用脚本引擎运行groovy脚本3.思考SpringBoot+Groovy运行动态脚本GroovyClassLoader方式GroovyScriptEngine方式变量绑定

最近项目中遇到了这样的需求:需要检查一个表的某些字段,是否为空,或者是否符合预期规则:比如大于0,或者在某个范围内。考虑将表名和字段名配置在数据库中,然后规则使用Groovy来写,比较灵活。

1. 引入依赖

org.codehaus.groovy

groovy

2.5.5

org.codehaus.groovy

groovy-jsr223

2.5.5

2. 使用脚本引擎运行groovy脚本

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}";

// 执行脚本

Ohttp://bject res = engine.eval(scriptStr, bindings);

在实际项目中,可以把ScriptEngine engine在项目初始化的时候生成,不需要每次调用都再去生成一个。

通过debug知道,在ScriptEngine内部有个map会缓存曾经执行过的脚本,所以性能方面也不需要担心。

Groovy语法参考

3.思考

使用这种方式的好处是什么?

方便:有新的表需要检查字段的时候,加配置就可以,减少工作量;简单的规则可以直接通过Groovy脚本实现,规则改变时可以很快的修改。

成本低:Groovy语法和java很像,不需要付出太大的学习成本。

为什么不使用规则引擎?

这不是个复杂的需求,现阶段没必要引入规则引擎也可以很好的完成需求。引入规则引擎会增加更多成本,但效果是差不多的。

SpringBoot+Groovy运行动态脚本

GroovyClassLoader方式

Java使用GroovyClassLoader动态加载Groovy脚本,调用脚本中的方法

在java中调用test.groovy脚本文件

ClassLoader parent = this.getClass().getClassLoader();

GroovyClassLoader loader = new GroovyClassLoader(parent);

http:// Chttp://lass 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脚本

方法调用

在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}"

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于postman传参的几种格式 list,map 等
下一篇:金融用什么软件(金融行业用什么软件)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~