加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

grails调用groovy脚本

发布时间:2020-12-14 16:43:49 所属栏目:大数据 来源:网络整理
导读:参考文章: http://www.poorren.com/java-groovy-dynamic-algorithm/ http://www.cnblogs.com/jizha/p/5027695.html?utm_source=tuicoolutm_medium=referral grails本身就是使用groovy开发的,所以调用groovy脚本也是很方便的。 我封装好的类如下: import g

参考文章:

http://www.poorren.com/java-groovy-dynamic-algorithm/

http://www.cnblogs.com/jizha/p/5027695.html?utm_source=tuicool&utm_medium=referral

grails本身就是使用groovy开发的,所以调用groovy脚本也是很方便的。


我封装好的类如下:

import grails.transaction.Transactional

@Transactional
class GroovyScriptUtilsService {
    def grailsApplication
    static String scriptRootDir = []    //  脚本文件所在目录
    static GroovyScriptEngine groovyScriptEngine


    def init(){
        scriptRootDir = getScriptDir()
        groovyScriptEngine = new GroovyScriptEngine(scriptRootDir)
        println("scriptRootDir=${scriptRootDir}")
    }

    /**
     *  调用Groovy脚本文件中的指定方法
     * @param scriptFileName        脚本文件名称,如:aaa.groovy
     * @param methodName        方法名称
     * @param args                   方法参数
     * @return
     */
    @Transactional
    def invokeMethod(String scriptFileName,String methodName,Object args = null) throws Exception{
        if(!groovyScriptEngine){
            init()
        }
        def ret = null
        Class scriptClass = null
        GroovyObject scriptInstance = null
        try {
            scriptClass = groovyScriptEngine.loadScriptByName(scriptFileName)
            scriptInstance = (GroovyObject)scriptClass.newInstance()
            ret = scriptInstance.invokeMethod(methodName,args)
        }
        catch (Exception ex) {
           ex.printStackTrace()
        }
        return ret;
    }


    String getScriptDir(){
        return getRealPath("groovyScript")
    }

    String getRealPath(String relativePath){
        String result
        try {
            result = grailsApplication.getMainContext().servletContext.getRealPath("/") + relativePath
            File dirDst = new File(result)
            if (!dirDst.exists()) {
                dirDst.mkdirs()
            }
        }
        catch (Exception ex) {
            ex.printStackTrace()
        }
        return result
    }

}

-------------------------------------------------------------------------------------------

调用例子:

def ScrapeService scrapeService

def result = groovyScriptUtilsService.invokeMethod("test.groovy","hello");
? println("result=${result}")


? ? ? ? Object args = ["ok"] ?// ?多个参数时:Object args = ["ok","11","222"]
? ? ? ? result = groovyScriptUtilsService.invokeMethod("test.groovy","hello",?args);
? ? ? ? println("result=${result}")

-----------------------------------------------------------------------------------------------------------------

脚本文件test.groovy:

def hello(){ ? ? return "无参hello" } def hello(str){ ? ? return "有参hello,参数=${str}" }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读