执行Groovy脚本的工具类
发布时间:2020-12-14 16:43:19 所属栏目:大数据 来源:网络整理
导读:groovy? import java.io.File;import java.net.URL;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import groovy.lang.GroovyClassLoader;import groovy.lang.GroovyCodeSource;import groovy.lang.Script;@SuppressWarnings({ "rawt
groovy? import java.io.File; import java.net.URL; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import groovy.lang.GroovyClassLoader; import groovy.lang.GroovyCodeSource; import groovy.lang.Script; @SuppressWarnings({ "rawtypes","unchecked" }) public class GroovyCompiler { private static Map<String,GroovyClass> groovyCaches = new ConcurrentHashMap<String,GroovyClass>(); private static ClassLoader cl = GroovyCompiler.class.getClassLoader(); private static GroovyClassLoader groovyCl = new GroovyClassLoader(cl); public static GroovyClass getClass(File script){ if(script == null || !script.exists()){ return null; } try { String fileName = script.getPath() ; GroovyClass groovyClazz = groovyCaches.get(fileName); //cached,check if modified if(groovyClazz != null){ long lastModified = script.lastModified(); //newest if(lastModified <= groovyClazz.getLastmodified() ){ return groovyClazz; } //update cache groovyClazz = null; } //need new a Instance //not use GroovyClassLoader cache Class<?> groovyClass = groovyCl.parseClass(new GroovyCodeSource(script,"UTF-8"),false); groovyClazz = new GroovyClass((Script)groovyClass.newInstance(),script.lastModified()); groovyCaches.put(fileName,groovyClazz); return groovyClazz; } catch (Exception e) { throw new RuntimeException(e); } } public static GroovyClass getClass(URL script){ return getClass(new File(script.getFile())); } public static GroovyClass getClass(String script){ return getClass(cl.getResource(script)); } public static class GroovyClass { public GroovyClass(){ } public GroovyClass(Script script,long lastmodified){ this.script = script; this.lastmodified = lastmodified; } Script script; long lastmodified = 0; public Script getScript() { return script; } public void setScript(Script script) { this.script = script; } public long getLastmodified() { return lastmodified; } public void setLastmodified(long lastmodified) { this.lastmodified = lastmodified; } public Object invoke(String methosName,Object[] args) { return script.invokeMethod(methosName,args); } public Object get() { return script.run(); } public Object get(Map binds) { script.getBinding().getVariables().putAll(binds); Object obj = script.run(); return obj; } } } 使用 public class GroovyKest { public static void main(String[] args) throws Exception { GroovyClass groovy = GroovyCompiler.getClass("script/view.groovy"); Map <String,String> context = new HashMap<>(); context.put("name","kan"); Object obj = groovy.get(context); System.out.println(obj); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |