mxd %!s(int64=5) %!d(string=hai) anos
pai
achega
7b649f7a72

+ 20 - 0
src/main/java/org/ssssssss/magicapi/config/MagicScriptCompiler.java

@@ -0,0 +1,20 @@
+package org.ssssssss.magicapi.config;
+
+import org.ssssssss.magicapi.cache.DefaultSqlCache;
+import org.ssssssss.magicapi.utils.MD5Utils;
+import org.ssssssss.script.MagicScript;
+
+public class MagicScriptCompiler {
+
+	private static DefaultSqlCache compileCache = new DefaultSqlCache(500, -1);
+
+	public static MagicScript compile(String script) {
+		String key = MD5Utils.encrypt(script);
+		MagicScript magicScript = (MagicScript) compileCache.get("default", key);
+		if(magicScript == null){
+			magicScript = MagicScript.create(script);
+			compileCache.put("default",key,magicScript,-1);
+		}
+		return magicScript;
+	}
+}

+ 1 - 1
src/main/java/org/ssssssss/magicapi/config/RequestHandler.java

@@ -69,7 +69,7 @@ public class RequestHandler {
 					return value;
 				}
 			}
-			Object value = MagicScriptEngine.execute(info.getScript(), context);
+			Object value = MagicScriptEngine.execute(MagicScriptCompiler.compile(info.getScript()), context);
 			// 执行后置拦截器
 			for (RequestInterceptor requestInterceptor : requestInterceptors) {
 				Object target = requestInterceptor.postHandle(info, context, value);

+ 1 - 1
src/main/java/org/ssssssss/magicapi/config/WebUIController.java

@@ -158,7 +158,7 @@ public class WebUIController {
 			try {
 				context.setBreakpoints((List<Integer>) breakpoints);
 				context.setTimeout(this.debugTimeout);
-				Object result = MagicScriptEngine.execute(script.toString(), context);
+				Object result = MagicScriptEngine.execute(MagicScriptCompiler.compile(script.toString()), context);
 				if (context.isRunning()) {
 					return new JsonBodyBean<>(1000, context.getId(), resultProvider.buildResult(1000, context.getId(), result), result);
 				} else if (context.isException()) {