From d4f1fc26daa09383e58821016feab6a47cdc1d25 Mon Sep 17 00:00:00 2001 From: Qin Dong Ming <2720806930@qq.com> Date: Fri, 6 Sep 2024 20:11:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8E=A5=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/muyu/controller/EngIneController.java | 3 +- .../src/main/java/com/muyu/test/RuleTest.java | 67 +++++++++++++++++++ .../main/java/com/muyu/test/TestService.java | 11 +-- 3 files changed, 75 insertions(+), 6 deletions(-) create mode 100644 cloud-etl-server/src/main/java/com/muyu/test/RuleTest.java diff --git a/cloud-etl-server/src/main/java/com/muyu/controller/EngIneController.java b/cloud-etl-server/src/main/java/com/muyu/controller/EngIneController.java index 8e691bc..79f3e45 100644 --- a/cloud-etl-server/src/main/java/com/muyu/controller/EngIneController.java +++ b/cloud-etl-server/src/main/java/com/muyu/controller/EngIneController.java @@ -14,6 +14,7 @@ import com.muyu.req.EngineVersionListResp; import com.muyu.service.EngIneService; import com.muyu.service.EngineVersionService; import com.muyu.test.JavaClass; +import com.muyu.test.RuleTest; import com.muyu.test.TestService; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.log4j.Log4j2; @@ -243,7 +244,7 @@ public class EngIneController extends BaseController { JavaClass.compile(String.valueOf(ruleEdition.getId())); log.error("错误原因:{}" + ruleEdition); //测试 - TestService.test(ruleEdition); + RuleTest.test(ruleEdition); return Result.success(engIneService.measurementList(ruleEdition)); } } diff --git a/cloud-etl-server/src/main/java/com/muyu/test/RuleTest.java b/cloud-etl-server/src/main/java/com/muyu/test/RuleTest.java new file mode 100644 index 0000000..5254340 --- /dev/null +++ b/cloud-etl-server/src/main/java/com/muyu/test/RuleTest.java @@ -0,0 +1,67 @@ +package com.muyu.test; + +import com.muyu.basic.BasicEngine; +import com.muyu.core.domain.DataValue; +import com.muyu.domain.EngineVersion; + + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.net.URL; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @ClassName RuleTest + * @Description 描述 + * @Author Chen + * @Date 2024/9/5 20:52 + */ +public class RuleTest { + static Map> engineMap = new ConcurrentHashMap<>(); + + //外部类文件路径 + public static final String engineWorkSourcePath = "/home/lib"; + public static final String className = "com.muyu.abstracts.generate."; + + public static void test(EngineVersion engineVersion) { + try { + //外部类文件路径 + String externalClassFilePath = + engineWorkSourcePath + "/com/muyu/abstracts" + engineVersion.getName() + ".class"; + Path classFilePath = Paths.get(externalClassFilePath); + //获取外部类所在的目录 + String externalClassDir = externalClassFilePath.substring(0, externalClassFilePath.lastIndexOf('/')); + URL[] urls = new URL[]{new File(externalClassDir).toURI().toURL()}; + ExternalClassLoader externalClassLoader = new ExternalClassLoader(urls); + //加载类 全限定名 + Class clazz = externalClassLoader.loadClassFromPath(classFilePath, className + engineVersion.getName()); + Object instance = clazz.getDeclaredConstructor().newInstance(); + engineMap.put(engineVersion.getName(), (BasicEngine) instance); + } catch (IOException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + DataValue dataValue = DataValue.builder() + .type("String") + .label("手机号") + .key("phone") + .value("张三") + .build(); + + BasicEngine engine = engineMap.get(engineVersion.getName()); + engine.set(dataValue); + engine.execution(); + } + +} diff --git a/cloud-etl-server/src/main/java/com/muyu/test/TestService.java b/cloud-etl-server/src/main/java/com/muyu/test/TestService.java index 97e35b0..3b9c054 100644 --- a/cloud-etl-server/src/main/java/com/muyu/test/TestService.java +++ b/cloud-etl-server/src/main/java/com/muyu/test/TestService.java @@ -27,9 +27,9 @@ public class TestService { static Map> engineMap = new ConcurrentHashMap<>(); - public static final String engineWorkSourcePath = "D:\\work\\teaching\\2112A\\engine"; + public static final String engineWorkSourcePath = "/home/lib"; public static final String engineWorkClassPath = engineWorkSourcePath; - public static final String className = "com.muyu.data.engine.service.ENGINE_VALUE_JDIES979972_V2"; + public static final String className = "com.muyu.abstracts.generate."; // package com.muyu.data.engine.service; @@ -83,6 +83,8 @@ public class TestService { } else { System.out.println("错误"); } + + // 假设这是你的外部类文件路径 String externalClassFilePath = engineWorkSourcePath + "\\com\\muyu\\abstracts\\"+engineVersion.getName()+".class"; @@ -98,11 +100,10 @@ public class TestService { // 加载类 // 注意类名必须是完全限定名(包括包名) Class clazz = externalClassLoader.loadClassFromPath(classFilePath, className); -// Class clazz = customClassLoader.defineClassFromBytes(externalClassBytes); // 创建类的实例 Object instance = clazz.getDeclaredConstructor().newInstance(); - engineMap.put("ENGINE_VALUE_JDIES979972_V2", (BasicEngine) instance); + engineMap.put(engineVersion.getName(), (BasicEngine) instance); } catch (IllegalAccessException | IOException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { @@ -115,7 +116,7 @@ public class TestService { .value("张三") .build(); - BasicEngine engine = engineMap.get("ENGINE_VALUE_JDIES979972_V2"); + BasicEngine engine = engineMap.get(engineVersion.getName()); engine.set(dataValue); engine.execution(); }