grails调用groovy脚本
参考文章: 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"); ----------------------------------------------------------------------------------------------------------------- 脚本文件test.groovy: def hello(){ ? ? return "无参hello" } def hello(str){ ? ? return "有参hello,参数=${str}" } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |