SpringBoot+Groovy运行动态脚本

SpringBoot+Groovy运行动态脚本

  • 1.相关依赖
  • 2.GroovyClassLoader方式
  • 3.GroovyScriptEngine方式
    • 方法调用
    • 变量绑定
  • 4.代码示例
  • 5.参考

1.相关依赖

pom.xml

        <dependency>
            <groupId>org.codehaus.groovygroupId>
            <artifactId>groovy-allartifactId>
            <version>2.5.6version>
            <type>pomtype>
        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脚本文件

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

你可能感兴趣的:(SpringBoot,Java,Groovy)