SpringBoot+Groovy运行动态脚本
1.相关依赖
pom.xml
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.5.6</version>
<type>pom</type>
</dependency>
2.GroovyClassLoader方式
Java使用GroovyClassLoader动态加载Groovy脚本,调用脚本中的方法
Java
在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;
}
}
3.GroovyScriptEngine方式
java使用GroovyScriptEngine脚本引擎加载Groovy脚本
方法调用
Java
在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
在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脚本文件
扫描二维码关注公众号,回复:
6063453 查看本文章
package com.example.demo.groovyscript
output = "test3 id: ${id}"
4.代码示例
https://github.com/sleetdream/groovydemo
5.参考
https://www.cnblogs.com/jevo/archive/2013/04/08/2992445.html
https://www.cnblogs.com/hunttown/archive/2017/05/03/6800591.html