/**
* @Title: GroovyUtil.java
* @Package: com.boco.gaia.service.mockalarm.util
* @Description: TODO
* @author 许凯勋
* @date 2016年9月21日 下午4:30:51
*/
package com.boco.gaia.service.mockalarm.util;
import groovy.lang.GroovyObject;
import groovy.util.GroovyScriptEngine;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;
/**
* @Description Groovy脚本调用的工具类
* @author 许凯勋
* @date 2016年9月21日 下午4:30:51
*/
public class GroovyUtil {
/** 日志助手 */
private static Logger logger = LoggerFactory.getLogger(GroovyUtil.class);
private static Map<String, GroovyObject> objects = new HashMap();
@SuppressWarnings("rawtypes")
public static synchronized GroovyObject initGroovyObject(Resource groovyFile) {
GroovyObject groovyObject = null;
try {
String filepath = groovyFile.getFile().getAbsolutePath();
if( !objects.containsKey(filepath)) {
GroovyScriptEngine scriptEngine = new GroovyScriptEngine(groovyFile.getFile().getAbsolutePath());
scriptEngine.getConfig().setSourceEncoding("GBK");
Class groovyClass = scriptEngine.loadScriptByName(groovyFile.getFilename());
groovyObject = (GroovyObject) groovyClass.newInstance();
objects.put(filepath, groovyObject);
} else {
groovyObject = objects.get(filepath);
}
} catch(Exception e) {
logger.error("获取groovy对象异常:{}", e);
}
return groovyObject;
}
/**
* @Description 根据给的groovy脚本文件路径和参数触发脚本执行
* @author 许凯勋
* @date 2016年9月21日 下午4:43:05
* @param groovyFilePath groovy脚本文件路径
* @param params 脚本所需参数
* @return 脚本执行结果
*/
public static boolean fireGroovy(Resource groovyFile, String methodName, Object[] params) {
boolean fireGroovyResult = false;
GroovyObject groovyObject = initGroovyObject(groovyFile);
if(groovyObject == null) {
return fireGroovyResult;
}
synchronized (groovyObject) {
try {
groovyObject.invokeMethod(methodName, params);
fireGroovyResult = true;
} catch (Exception e) {
logger.error("执行groovy异常:" + e.getLocalizedMessage());
}
}
return fireGroovyResult;
}
}
解析并触发groovy脚本
最新推荐文章于 2024-01-03 15:52:54 发布