From 13ac2666274f4f62a3679532503930a4a1347012 Mon Sep 17 00:00:00 2001 From: mediabot-pt <295750538+mediabot-pt@users.noreply.github.com> Date: Sun, 5 Jul 2026 23:39:59 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=BB=98=E8=AE=A4=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=94=B9=E4=B8=BACachedStorageService(?= =?UTF-8?q?=E4=B8=83=E7=89=9B=E4=BA=91+=E6=9C=AC=E5=9C=B0=E7=BC=93?= =?UTF-8?q?=E5=AD=98)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../par/core/adapter/GroovyScriptEngine.java | 48 ++++++++++++++----- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/par-core/src/main/java/com/par/core/adapter/GroovyScriptEngine.java b/par-core/src/main/java/com/par/core/adapter/GroovyScriptEngine.java index 5ea03a3..8b87440 100644 --- a/par-core/src/main/java/com/par/core/adapter/GroovyScriptEngine.java +++ b/par-core/src/main/java/com/par/core/adapter/GroovyScriptEngine.java @@ -24,8 +24,17 @@ public class GroovyScriptEngine { private static final ObjectMapper objectMapper = new ObjectMapper(); private static final GroovyClassLoader classLoader = new GroovyClassLoader( Thread.currentThread().getContextClassLoader()); - /** 类型 → 默认脚本 */ - private static final Map DEFAULT_SCRIPTS = new ConcurrentHashMap<>(); + /** 默认脚本存储路径前缀 */ + private static final String DEFAULT_SCRIPTS_PATH = "scripts/default/"; + /** 类型 → 默认脚本缓存 */ + private static final Map DEFAULT_SCRIPTS_CACHE = new ConcurrentHashMap<>(); + /** 存储服务(由 Spring 注入) */ + private static com.par.core.storage.CachedStorageService storageService; + + // Spring 注入 + public GroovyScriptEngine(com.par.core.storage.CachedStorageService storageService) { + GroovyScriptEngine.storageService = storageService; + } /** 脚本前缀:自动导入必要包 + PluginContext 桩 */ private static final String SCRIPT_PREFIX = "import groovy.json.*\n" + @@ -44,29 +53,42 @@ public class GroovyScriptEngine { } /** - * 保存站点类型默认脚本到 classpath + * 保存站点类型默认脚本到七牛云+本地缓存 */ public static void saveDefaultScript(String siteType, String script) { if (siteType == null || script == null) return; String key = siteType.toLowerCase(); - DEFAULT_SCRIPTS.put(key, script); - try { - var path = java.nio.file.Paths.get( - GroovyScriptEngine.class.getClassLoader().getResource("scripts/default-" + key + ".groovy").toURI()); - java.nio.file.Files.writeString(path, script, java.nio.charset.StandardCharsets.UTF_8); - log.info("Default script saved: default-{}.groovy", key); - } catch (Exception e) { - log.error("Failed to save default script: {}", key, e); + DEFAULT_SCRIPTS_CACHE.put(key, script); + if (storageService != null) { + storageService.store(DEFAULT_SCRIPTS_PATH + key + ".groovy", script); + } else { + // 回退到 classpath 写入(开发环境) + try { + var path = java.nio.file.Paths.get( + GroovyScriptEngine.class.getClassLoader().getResource("scripts/default-" + key + ".groovy").toURI()); + java.nio.file.Files.writeString(path, script, java.nio.charset.StandardCharsets.UTF_8); + } catch (Exception e) { + log.warn("Fallback save failed: {}", e.getMessage()); + } } + log.info("Default script saved: default-{}.groovy", key); } /** - * 从 classpath 加载默认脚本文件 + * 加载站点类型默认脚本(优先七牛云/本地缓存,回退到 classpath) */ public static String loadDefaultByType(String siteType) { if (siteType == null) return null; String key = siteType.toLowerCase(); - return DEFAULT_SCRIPTS.computeIfAbsent(key, k -> { + return DEFAULT_SCRIPTS_CACHE.computeIfAbsent(key, k -> { + // 先尝试从存储服务读取 + if (storageService != null) { + try { + String script = storageService.read(DEFAULT_SCRIPTS_PATH + k + ".groovy"); + if (script != null && !script.isBlank()) return script; + } catch (Exception ignored) {} + } + // 回退到 classpath String path = "scripts/default-" + k + ".groovy"; try (var in = GroovyScriptEngine.class.getClassLoader().getResourceAsStream(path)) { if (in == null) return null;