master
parent
445479fb17
commit
835fcd1e72
|
@ -39,6 +39,11 @@
|
|||
<artifactId>cloud-datasources-common</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-etl</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-devtools</artifactId>
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.muyu.rule.common.basic.abstracts;
|
||||
|
||||
import com.muyu.common.domain.DataValue;
|
||||
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
import com.muyu.rule.common.basic.BasicEngine;
|
||||
import com.muyu.rule.common.basic.handler.DataEngineDataSetHandler;
|
||||
import com.muyu.rule.common.basic.handler.DataEngineHandler;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.muyu.rule.common.basic.abstracts;
|
||||
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
import com.muyu.rule.common.basic.BasicEngine;
|
||||
import com.muyu.rule.common.basic.handler.DataEngineRowHandler;
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.muyu.rule.common.basic.abstracts;
|
||||
|
||||
import com.muyu.common.domain.DataValue;
|
||||
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
import com.muyu.rule.common.basic.BasicEngine;
|
||||
import com.muyu.rule.common.basic.handler.DataEngineValueHandler;
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.muyu.rule.common.basic.handler;
|
||||
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
|
||||
/**
|
||||
* @Author:张承志
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.muyu.rule.common.basic.handler;
|
||||
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
|
||||
/**
|
||||
* @Author:张承志
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.muyu.rule.common.basic.handler;
|
||||
|
||||
import com.muyu.common.core.text.Convert;
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
|
||||
/**
|
||||
* @Author:张承志
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.muyu.rule.common.engine;
|
||||
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
import com.muyu.rule.common.basic.abstracts.DataEngineDataSetActuator;
|
||||
import com.muyu.rule.common.exception.DeliteException;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package com.muyu.rule.common.engine;
|
|||
import cn.hutool.core.util.DesensitizedUtil;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
import com.muyu.rule.common.basic.abstracts.DataEngineDataSetActuator;
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.muyu.rule.common.engine;
|
||||
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
import com.muyu.rule.common.basic.abstracts.DataEngineRowActuator;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.muyu.rule.common.engine;
|
||||
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
import com.muyu.rule.common.basic.abstracts.DataEngineValueActuator;
|
||||
import com.muyu.rule.common.exception.DeliteException;
|
||||
|
||||
|
|
|
@ -2,8 +2,9 @@ package com.muyu.rule.common.engine;
|
|||
|
||||
|
||||
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.common.enums.DataType;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
|
||||
import com.muyu.etl.enums.DataType;
|
||||
import com.muyu.rule.common.basic.abstracts.DataEngineValueActuator;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.muyu.rule.common.engine;
|
||||
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
import com.muyu.rule.common.basic.abstracts.DataEngineValueActuator;
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.muyu.rule.common.map;
|
||||
|
||||
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
import com.muyu.rule.common.basic.BasicEngine;
|
||||
|
||||
import java.util.Map;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.muyu.rule.common.utils;
|
||||
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
import com.muyu.rule.common.basic.BasicEngine;
|
||||
import com.muyu.rule.common.load.ExternalClassLoader;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
|
|
|
@ -0,0 +1,190 @@
|
|||
package com.muyu.rule.common.utils;
|
||||
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
import com.muyu.rule.common.basic.BasicEngine;
|
||||
import com.muyu.rule.common.load.ExternalClassLoader;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
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;
|
||||
|
||||
import static com.muyu.rule.common.constant.SuffixClass.Suffix_CLASS;
|
||||
|
||||
|
||||
@Log4j2
|
||||
@Component
|
||||
public class LoadEngineClassTwo {
|
||||
public static Map<String, BasicEngine<DataValue>> engineMap = new ConcurrentHashMap<>();
|
||||
public static Map<String, BasicEngine<DataValue[]>> engineRowMap = new ConcurrentHashMap<>();
|
||||
public static Map<String, BasicEngine<DataValue[][]>> engineDataSetMap = new ConcurrentHashMap<>();
|
||||
/**
|
||||
* 服务器的存放java源代码的位置
|
||||
*/
|
||||
public static final String engineWorkSourcePath = "/home/source/";
|
||||
|
||||
|
||||
/**
|
||||
* 引擎加载需要引入类和包文件的位置
|
||||
*/
|
||||
public static final String importClassAndPackPath = "home/lib/";
|
||||
|
||||
/**
|
||||
* 规则引擎的包的路径
|
||||
*/
|
||||
public static final String className_prefix = "com.muyu.rule.common.engine.";
|
||||
|
||||
/**
|
||||
* 服务器存放引擎的class文件的位置
|
||||
*
|
||||
* @param className 类名
|
||||
* @param versionClazz 源代码
|
||||
*/
|
||||
|
||||
public static final String serverClassPath = "com/muyu/rule/common/engine/";
|
||||
public void loadValueEngineClass(String className) {
|
||||
for (String s : engineMap.keySet()) {
|
||||
log.info("======"+s);
|
||||
}
|
||||
//查询类是否已加载,避免重复加载规则引擎
|
||||
if (!engineMap.containsKey(className)) {
|
||||
log.info("引擎map集合下没有该实例的规则,进行自定义类加载");
|
||||
try {
|
||||
// 假设这是你的外部类文件路径
|
||||
String externalClassFilePath =
|
||||
importClassAndPackPath + serverClassPath + className +Suffix_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 = null;
|
||||
clazz = externalClassLoader.loadClassFromPath(classFilePath, className_prefix + className);
|
||||
//创建类的实例
|
||||
Object instance = clazz.getDeclaredConstructor().newInstance();
|
||||
//将加载出来引擎实例存入map集合中
|
||||
|
||||
engineMap.put(className,(BasicEngine<DataValue>) instance);
|
||||
|
||||
} catch (IOException | InvocationTargetException | InstantiationException | IllegalAccessException |
|
||||
NoSuchMethodException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
public void loadRowEngineClass(String className) {
|
||||
|
||||
//查询类是否已加载,避免重复加载规则引擎
|
||||
if (!engineRowMap.containsKey(className)) {
|
||||
log.info("引擎map集合下没有该实例的规则,进行自定义类加载");
|
||||
try {
|
||||
// 假设这是你的外部类文件路径
|
||||
String externalClassFilePath =
|
||||
importClassAndPackPath + serverClassPath + className + Suffix_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 = null;
|
||||
|
||||
clazz = externalClassLoader.loadClassFromPath(classFilePath, className_prefix + className);
|
||||
//创建类的实例
|
||||
Object instance = clazz.getDeclaredConstructor().newInstance();
|
||||
//将加载出来引擎实例存入map集合中
|
||||
|
||||
engineRowMap.put(className,(BasicEngine<DataValue[]>) instance);
|
||||
|
||||
} catch (IOException | InvocationTargetException | InstantiationException | IllegalAccessException |
|
||||
NoSuchMethodException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
public void loadDataSetEngineClass(String className) {
|
||||
|
||||
//查询类是否已加载,避免重复加载规则引擎
|
||||
if (!engineDataSetMap.containsKey(className)) {
|
||||
log.info("引擎map集合下没有该实例的规则,进行自定义类加载");
|
||||
try {
|
||||
// 设置外部类文件路径
|
||||
String externalClassFilePath =
|
||||
importClassAndPackPath + serverClassPath + className + Suffix_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 = null;
|
||||
|
||||
clazz = externalClassLoader.loadClassFromPath(classFilePath, className_prefix + className);
|
||||
//创建类的实例
|
||||
Object instance = clazz.getDeclaredConstructor().newInstance();
|
||||
//将加载出来引擎实例存入map集合中
|
||||
|
||||
engineDataSetMap.put(className,(BasicEngine<DataValue[][]>) instance);
|
||||
|
||||
} catch (IOException | InvocationTargetException | InstantiationException | IllegalAccessException |
|
||||
NoSuchMethodException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public DataValue testEngine(String className, DataValue dataValue) {
|
||||
log.info("测试的数据[]{}:" + dataValue);
|
||||
loadValueEngineClass(className);
|
||||
BasicEngine<DataValue> valueBasicEngine = engineMap.get(className);
|
||||
|
||||
valueBasicEngine.set(dataValue);
|
||||
|
||||
valueBasicEngine.execution();
|
||||
DataValue value = valueBasicEngine.get();
|
||||
return value;
|
||||
}
|
||||
|
||||
public DataValue[] testEngine(String className, DataValue[] dataValue) {
|
||||
log.info("测试的数据[]{}:" + dataValue);
|
||||
loadRowEngineClass(className);
|
||||
BasicEngine<DataValue[]> basicEngine = engineRowMap.get(className);
|
||||
|
||||
basicEngine.set(dataValue);
|
||||
|
||||
basicEngine.execution();
|
||||
DataValue[] dataValues = basicEngine.get();
|
||||
return dataValues;
|
||||
}
|
||||
|
||||
|
||||
public DataValue[][] testEngine(String className, DataValue[][] dataValues) {
|
||||
loadDataSetEngineClass(className);
|
||||
BasicEngine<DataValue[][]> basicEngine = engineDataSetMap.get(className);
|
||||
|
||||
basicEngine.set(dataValues);
|
||||
|
||||
basicEngine.execution();
|
||||
|
||||
DataValue[][] dataValues1 = basicEngine.get();
|
||||
|
||||
return dataValues1;
|
||||
}
|
||||
}
|
||||
|
|
@ -97,7 +97,11 @@
|
|||
<artifactId>spring-boot-devtools</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-etl</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
package com.muyu.rule.server;
|
||||
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.common.enums.DataType;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
|
||||
import com.muyu.etl.enums.DataType;
|
||||
import com.muyu.rule.common.utils.OssUtil;
|
||||
import com.muyu.rule.common.basic.BasicEngine;
|
||||
import com.muyu.rule.server.complie.SourceCodeComplier;
|
||||
|
|
|
@ -2,7 +2,8 @@ package com.muyu.rule.server.controller;
|
|||
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.common.domain.DataValue;
|
||||
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
import com.muyu.rule.common.domain.RuleEngineVersion;
|
||||
import com.muyu.rule.common.domain.req.VersionAddReq;
|
||||
import com.muyu.rule.common.utils.LoadEngineClass;
|
||||
|
@ -131,7 +132,7 @@ public class RuleEngineVersionController {
|
|||
"import cn.hutool.core.util.DesensitizedUtil;\n" +
|
||||
"import com.alibaba.fastjson2.JSON;\n" +
|
||||
"import com.alibaba.fastjson2.JSONObject;\n" +
|
||||
"import com.muyu.common.domain.DataValue;\n" +
|
||||
"import com.muyu.etl.domain.DataValue;\n" +
|
||||
"import com.muyu.rule.common.basic.abstracts." + parentClass + ";\n" +
|
||||
"\n" +
|
||||
"\n" +
|
||||
|
@ -226,7 +227,7 @@ public class RuleEngineVersionController {
|
|||
// "import cn.hutool.core.util.DesensitizedUtil;\n" +
|
||||
// "import com.alibaba.fastjson2.JSON;\n" +
|
||||
// "import com.alibaba.fastjson2.JSONObject;\n" +
|
||||
// "import com.muyu.common.domain.DataValue;\n" +
|
||||
// "import com.muyu.etl.domain.DataValue;\n" +
|
||||
// "import com.muyu.rule.common.basic.abstracts.${parentClass};\n" +
|
||||
// "\n" +
|
||||
// "\n" +
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.muyu.rule.server.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
import com.muyu.rule.common.domain.RuleEngineVersion;
|
||||
|
||||
import java.util.List;
|
||||
|
|
|
@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.muyu.common.core.enums.SystemYesNo;
|
||||
import com.muyu.common.domain.DataValue;
|
||||
import com.muyu.etl.domain.DataValue;
|
||||
import com.muyu.rule.common.basic.BasicEngine;
|
||||
import com.muyu.rule.common.domain.RuleEngineVersion;
|
||||
import com.muyu.rule.common.load.ExternalClassLoader;
|
||||
|
|
Loading…
Reference in New Issue