master
zhang chengzhi 2024-09-04 19:11:25 +08:00
parent bbd20c85ed
commit 63052ba57f
11 changed files with 114 additions and 118 deletions

View File

@ -1,58 +0,0 @@
package com.muyu.rule.common.domain;
import java.util.*;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public static void main(String[] args) {
Person[] people = new Person[]{
new Person("Alice", 30),
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Alice", 30),
new Person("Charlie", 35)
};
// 使用 HashSet 去重
Set<Person> uniquePeople = new HashSet<>(Arrays.asList(people));
// 将 Set 转换回数组
Person[] uniqueArray = uniquePeople.toArray(new Person[0]);
// 输出结果
System.out.println(Arrays.toString(uniqueArray));
}
}

View File

@ -1,5 +1,7 @@
package com.muyu.rule.server; package com.muyu.rule.server;
import lombok.Setter;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
/** /**
@ -38,12 +40,13 @@ public class EngineConfig {
/** /**
* *
*/ */
private static String serverPath ="home/source/"; private String sourcePath ="home/source/";
/** /**
* *
*/ */
private static String ClassPath ="home/class/"; @Setter
private String classPath ="home/class/";
/** /**
* *
@ -60,12 +63,21 @@ public class EngineConfig {
private String serverPack="com.muyu.rule.server.basic.engine.value."; private String serverPack="com.muyu.rule.server.basic.engine.value.";
public String getServerPath() {
return serverPath; public String getPack() {
return pack;
} }
public void setServerPath(String serverPath) { public void setPack(String pack) {
this.serverPath = serverPath; this.pack = pack;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
} }
public String getLocalSource() { public String getLocalSource() {
@ -84,6 +96,22 @@ public class EngineConfig {
this.localTarget = localTarget; this.localTarget = localTarget;
} }
public String getSourcePath() {
return sourcePath;
}
public void setSourcePath(String sourcePath) {
this.sourcePath = sourcePath;
}
public String getClassPath() {
return classPath;
}
public void setClassPath(String classPath) {
this.classPath = classPath;
}
public String getServerPack() { public String getServerPack() {
return serverPack; return serverPack;
} }
@ -91,23 +119,4 @@ public class EngineConfig {
public void setServerPack(String serverPack) { public void setServerPack(String serverPack) {
this.serverPack = serverPack; this.serverPack = serverPack;
} }
public String getPack() {
return pack;
}
public void setPack(String pack) {
this.pack = pack;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
} }

View File

@ -47,7 +47,6 @@ public class EngineTest {
Object engineObject = EngineExecution.engineExe("Engine_2024_8_23_2347", params); Object engineObject = EngineExecution.engineExe("Engine_2024_8_23_2347", params);
System.out.println("====>"+engineObject); System.out.println("====>"+engineObject);
} }
} }

View File

@ -13,23 +13,19 @@ import com.muyu.rule.common.domain.DataValue;
public class DataEngineValueHandler { public class DataEngineValueHandler {
public static void set(DataValue dataDescribe){ public static void set(DataValue dataValue){
DataEngineHandler.set(dataValue);
DataEngineHandler.set(dataDescribe);
} }
public static DataValue get(){ public static DataValue get(){
return DataEngineHandler.get(); return DataEngineHandler.get();
} }
public static void remove(){ public static void remove(){
DataEngineHandler.remove(); DataEngineHandler.remove();
} }
public static Object getValue(){ public static Object getValue(){
return get().getValue(); return get().getValue();
} }
@ -38,7 +34,4 @@ public class DataEngineValueHandler {
return Convert.toInt(getValue(),null); return Convert.toInt(getValue(),null);
} }
} }

View File

@ -52,12 +52,14 @@ public class DataSourceDisposeController {
/** /**
* *
* @param dataValue * @param object
* @return * @return
*/ */
@PostMapping("/valueTest") @PostMapping("/valueTest")
public Result valueTest(DataValue dataValue){ public Result valueTest(Object object){
sourceDisposeService.valueTest(object);
return Result.success(); return Result.success();
} }

View File

@ -146,25 +146,6 @@ public Result testValue(@PathVariable("versionClazz") String versionClazz,@Reque
return Result.success(); return Result.success();
} }
@PostMapping("/test") @PostMapping("/test")
public Result test(){ public Result test(){

View File

@ -0,0 +1,23 @@
package com.muyu.rule.server.load;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.Files;
import java.nio.file.Path;
public class ExternalClassLoader extends URLClassLoader {
public ExternalClassLoader(URL[] urls) {
super(urls, Thread.currentThread().getContextClassLoader());
}
public Class<?> defineClassFromBytes(byte[] classBytes, String className) throws IOException {
return super.defineClass(className, classBytes, 0, classBytes.length);
}
public Class<?> loadClassFromPath(Path classFilePath, String className) throws IOException {
byte[] classData = Files.readAllBytes(classFilePath);
return defineClassFromBytes(classData, className);
}
}

View File

@ -28,4 +28,6 @@ public interface SourceDisposeService {
Boolean notEmpty(Object dataSource); Boolean notEmpty(Object dataSource);
String valueTest(Object object);
} }

View File

@ -0,0 +1,11 @@
package com.muyu.rule.server.service;
/**
* @Author
* @Packagecom.muyu.rule.server.service
* @Projectcloud-etl-rule
* @nameTestServer
* @Date2024/9/4 18:56
*/
public class TestServer {
}

View File

@ -20,11 +20,16 @@ import com.muyu.rule.server.service.RuleEngineVersionService;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.File; import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Base64; import java.util.Base64;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -107,14 +112,34 @@ public class RuleEngineServiceImpl extends ServiceImpl<RuleEngineVersionMapper,
EngineConfig engineConfig = new EngineConfig(); EngineConfig engineConfig = new EngineConfig();
// String filePath ="home/"+ossFilePath; // String filePath ="home/"+ossFilePath;
String filePath = engineConfig.getServerPath() + ossFilePath; String filePath = engineConfig.getSourcePath() + ossFilePath;
//下载容器 //下载容器
OssUtil.downloadFileForBucket(bucketName, ossFilePath, filePath); OssUtil.downloadFileForBucket(bucketName, ossFilePath, filePath);
//编译 //编译
SourceCodeComplier.javaCompilerPath(engineConfig.getServerPath()); JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
//
InputStream first = null; // 程序的输入 null 用 system.in
OutputStream second = null; // 程序的输出 null 用 system.out
OutputStream third = null; // 程序的错误输出 .,null 用 system.err
// 程序编译参数 注意 我们编译目录是我们的项目目录
String[] strings = {"-classpath",engineConfig.getSourcePath(),"-verbose","-d", engineConfig.getSourcePath(), engineConfig.getSourcePath() +"\\"+className+Suffix_JAVA};
// 0 表示成功, 其他表示出现了错误
System.out.println(Arrays.toString(strings));
int i = javaCompiler.run(first, second, third, strings);
if (i == 0 ) {
System.out.println("成功");
}else {
System.out.println("错误");
}
// 假设这是你的外部类文件路径
String externalClassFilePath =
engineConfig.getSourcePath() + "\\com\\muyu\\data\\engine\\service\\"+className+Suffix_JAVA;
Path classFilePath = Paths.get(externalClassFilePath);
//对class文件进行自定义类加载规则引擎 //对class文件进行自定义类加载规则引擎
Map<String, Class<?>> stringClassMap = JavaBinaryClassLoader.loadClassesByLocation(engineConfig.getServerPack(), engineConfig.getServerPath()); Map<String, Class<?>> stringClassMap = JavaBinaryClassLoader.loadClassesByLocation(engineConfig.getServerPack(), engineConfig.getClassPath());
} }
static Map<String, BasicEngine<DataValue>> engineMap = new ConcurrentHashMap<>(); static Map<String, BasicEngine<DataValue>> engineMap = new ConcurrentHashMap<>();

View File

@ -36,4 +36,13 @@ public class SourceDisposeServiceImpl implements SourceDisposeService {
return true; return true;
} }
@Override
public String valueTest(Object object) {
return null;
}
} }