From af1685f2458d2f2f25ea8b668516c2ef45b41b7d Mon Sep 17 00:00:00 2001 From: Qin Dong Ming <2720806930@qq.com> Date: Sun, 8 Sep 2024 20:50:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/muyu/BasicEngine.java | 2 + .../serviceImpl/EngIneServiceImpl.java | 73 +++++++++++-------- 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/cloud-etl-server/src/main/java/com/muyu/BasicEngine.java b/cloud-etl-server/src/main/java/com/muyu/BasicEngine.java index 4079b6e..b70302a 100644 --- a/cloud-etl-server/src/main/java/com/muyu/BasicEngine.java +++ b/cloud-etl-server/src/main/java/com/muyu/BasicEngine.java @@ -1,5 +1,6 @@ package com.muyu; +import com.muyu.domain.EngineVersion; import com.muyu.handler.DataEngineHandler; public interface BasicEngine { @@ -14,4 +15,5 @@ public interface BasicEngine { public void execution(); + } diff --git a/cloud-etl-server/src/main/java/com/muyu/service/serviceImpl/EngIneServiceImpl.java b/cloud-etl-server/src/main/java/com/muyu/service/serviceImpl/EngIneServiceImpl.java index 8e5c696..7325bb2 100644 --- a/cloud-etl-server/src/main/java/com/muyu/service/serviceImpl/EngIneServiceImpl.java +++ b/cloud-etl-server/src/main/java/com/muyu/service/serviceImpl/EngIneServiceImpl.java @@ -15,7 +15,7 @@ import com.muyu.req.EngineVersionListResp; import com.muyu.service.EngIneService; import com.muyu.service.EngineVersionService; import com.muyu.test.ExternalClassLoader; -import jakarta.validation.Path; +import com.muyu.test.TestService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -23,8 +23,10 @@ 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.List; +import java.util.concurrent.ConcurrentHashMap; import static com.muyu.test.RuleTest.engineWorkSourcePath; @@ -45,38 +47,47 @@ public class EngIneServiceImpl extends ServiceImpl engineMap = new ConcurrentHashMap(); + private static final String objectPath = "com.muyu.test"; + @Override public Object measurementList(EngineVersion engineVersion) { -// EngineVersion dataValue = engineVersion; -// String versionClass = engineVersion.getVersionClass(); -// CompileService.test(engineVersion.getVersionCode(), engineVersion.getVersionClass()); -// try { -// //外部类文件路径 -// String externalClassFilePath = engineWorkSourcePath + "/" + objectPath + "/" + versionClass + ".class"; -// Path classFilePath = Paths.get(externalClassFilePath); -// //获取外部类所在的目录 -// String externalClassDir = externalClassFilePath.substring(0, externalClassFilePath.lastIndexOf('/')); -// URL[] urls = null; -// urls = new URL[]{new File(externalClassDir).toURI().toURL()}; -// //创建自定义类加载 -// ExternalClassLoader externalClassLoader = new ExternalClassLoader(urls); -// -// //加载类 -// Class clazz = externalClassLoader.loadClassFromPath(classFilePath, packagePath + "." + versionClass); -// //创建类的实例 -// Object instance = clazz.getDeclaredConstructor().newInstance(); -// -// engineMap.put(versionClass, (BasicEngine) instance); -// } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException | -// IOException e) { -// throw new RuntimeException(e); -// } -// -// BasicEngine engine = engineMap.get(versionClass); -// engine.set(dataValue); -// engine.execution(); -// return Result.success(); - return null; + EngineVersion dataValue = engineVersion; + String versionClass = engineVersion.getVersionClass(); + TestService.test(engineVersion); + try { + //外部类文件路径 + String externalClassFilePath = engineWorkSourcePath + "/" + objectPath + "/" + versionClass + ".class"; + Path classFilePath = Paths.get(externalClassFilePath); + //获取外部类所在的目录 + String externalClassDir = externalClassFilePath.substring(0, externalClassFilePath.lastIndexOf('/')); + URL[] urls = null; + urls = new URL[]{new File(externalClassDir).toURI().toURL()}; + //创建自定义类加载 + ExternalClassLoader externalClassLoader = new ExternalClassLoader(urls); + + //加载类 + Class clazz = externalClassLoader.loadClassFromPath(classFilePath, packagePath + "." + versionClass); + //创建类的实例 + Object instance = clazz.getDeclaredConstructor().newInstance(); + + engineMap.put(versionClass, instance); + } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException | + IOException e) { + throw new RuntimeException(e); + } + + BasicEngine engine = (BasicEngine) engineMap.get(versionClass); + try { + engine.set(DataValue.class.newInstance()); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + engine.execution(); + return Result.success(); } @Override