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}" } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
