master
zhang chengzhi 2024-09-05 15:58:49 +08:00
parent 221d5e36cd
commit 9022d4995d
2 changed files with 49 additions and 27 deletions

View File

@ -7,7 +7,7 @@ import com.muyu.rule.common.basic.abstracts.DataEngineValueActuator;
* @Author
* @Packagecom.muyu.rule.server.basic.engine
* @Projectcloud-etl-rule
* @nameENGINE_phone_zzzzz_V9
* @name
* @Date2024/8/29 15:51
*/
public class ENGINE_phone_zzzzz_V9 extends DataEngineValueActuator {
@ -16,6 +16,8 @@ public class ENGINE_phone_zzzzz_V9 extends DataEngineValueActuator {
DataValue dataValue = get();
if (dataValue.getValue() == null){
System.out.println("数据为空");
}else {
System.out.println("数据非空:"+dataValue.getValue());
}
}
}

View File

@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
@ -96,12 +97,13 @@ public class RuleEngineVersionServiceImpl extends ServiceImpl<RuleEngineVersionM
return string;
}
static Map<String, BasicEngine<DataValue>> engineMap = new ConcurrentHashMap<>();
public static final String engineWorkSourcePath = "home/source/";
public static final String engineWorkClassPath = "home/class/";
//
//
public static final String className_prefix = "com.muyu.rule.server.basic.engine.value.";
public static final String className_prefix = "com.muyu.rule.common.basic.engine.value.";
//todo
@ -148,7 +150,7 @@ log.info("规则引擎的编译参数{}[]",Arrays.toString(strings));
}
// 假设这是你的外部类文件路径
String externalClassFilePath =
engineWorkSourcePath +className+Suffix_CLASS;
"home/lib/"+"com//" +className+Suffix_CLASS;
Path classFilePath = Paths.get(externalClassFilePath);
String externalClassDir = externalClassFilePath.substring(0, externalClassFilePath.lastIndexOf('/'));
URL[] urls = new URL[]{new File(externalClassDir).toURI().toURL()};
@ -158,42 +160,60 @@ log.info("规则引擎的编译参数{}[]",Arrays.toString(strings));
//加载类
//注意类名必须是完全限定名(包括包名)
// Class<?> clazz = externalClassLoader.loadClassFromPath(classFilePath,className_prefix+className+Suffix_CLASS);
Class<?> clazz = externalClassLoader.loadClassFromPath(classFilePath,className_prefix+className);
//创建类的实例
//Object instance = clazz.getDeclaredConstructor().newInstance();
Object instance = clazz.getDeclaredConstructor().newInstance();
engineMap.put(className, (BasicEngine<DataValue>) 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("name")
.value("张三")
.build();
BasicEngine<DataValue> engine = engineMap.get(className);
engine.set(dataValue);
engine.execution();
//对class文件进行自定义类加载规则引擎
// Map<String, Class<?>> stringClassMap = JavaBinaryClassLoader.loadClassesByLocation(engineConfig.getServerPack(), engineConfig.getClassPath());
}
static Map<String, BasicEngine<DataValue>> engineMap = new ConcurrentHashMap<>();
static {
try {
Class<?> aClass = Class.forName("com.muyu.rule.common.basic.engine.value.ENGINE_VALUE_VFD1000_V1");
Class<?> aClass2 = Class.forName("com.muyu.rule.common.basic.engine.value.ENGINE_VALUE_VFD1000_V2");
try {
engineMap.put("ENGINE_VALUE_VFD1000_V1", (BasicEngine<DataValue>) aClass.newInstance());
engineMap.put("ENGINE_VALUE_VFD1000_V2", (BasicEngine<DataValue>) aClass2.newInstance());
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
// static Map<String, BasicEngine<DataValue>> engineMap = new ConcurrentHashMap<>();
//
// static {
// try {
// Class<?> aClass = Class.forName("com.muyu.rule.common.basic.engine.value.ENGINE_VALUE_VFD1000_V1");
// Class<?> aClass2 = Class.forName("com.muyu.rule.common.basic.engine.value.ENGINE_VALUE_VFD1000_V2");
// try {
// engineMap.put("ENGINE_VALUE_VFD1000_V1", (BasicEngine<DataValue>) aClass.newInstance());
// engineMap.put("ENGINE_VALUE_VFD1000_V2", (BasicEngine<DataValue>) aClass2.newInstance());
// } catch (InstantiationException e) {
// throw new RuntimeException(e);
// } catch (IllegalAccessException e) {
// throw new RuntimeException(e);
// }
// } catch (ClassNotFoundException e) {
// throw new RuntimeException(e);
// }
//
// }
@Override
public void testValue(String versionClazz, DataValue dataValue) {