|
|
@ -3,6 +3,8 @@ package com.xxl.job.core.executor;
|
|
|
|
import com.xxl.job.core.biz.AdminBiz;
|
|
|
|
import com.xxl.job.core.biz.AdminBiz;
|
|
|
|
import com.xxl.job.core.biz.client.AdminBizClient;
|
|
|
|
import com.xxl.job.core.biz.client.AdminBizClient;
|
|
|
|
import com.xxl.job.core.handler.IJobHandler;
|
|
|
|
import com.xxl.job.core.handler.IJobHandler;
|
|
|
|
|
|
|
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
|
|
|
|
|
|
|
import com.xxl.job.core.handler.impl.MethodJobHandler;
|
|
|
|
import com.xxl.job.core.log.XxlJobFileAppender;
|
|
|
|
import com.xxl.job.core.log.XxlJobFileAppender;
|
|
|
|
import com.xxl.job.core.server.EmbedServer;
|
|
|
|
import com.xxl.job.core.server.EmbedServer;
|
|
|
|
import com.xxl.job.core.thread.JobLogFileCleanThread;
|
|
|
|
import com.xxl.job.core.thread.JobLogFileCleanThread;
|
|
|
@ -13,6 +15,7 @@ import com.xxl.job.core.util.NetUtil;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.lang.reflect.Method;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Map;
|
|
|
@ -110,6 +113,50 @@ public class XxlJobExecutor {
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected void registerJobHandler(XxlJob xxlJob, Object bean, Method executeMethod){
|
|
|
|
|
|
|
|
if (xxlJob == null) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String name = xxlJob.value();
|
|
|
|
|
|
|
|
//make and simplify the variables since they'll be called several times later
|
|
|
|
|
|
|
|
Class<?> clazz = bean.getClass();
|
|
|
|
|
|
|
|
String methodName = executeMethod.getName();
|
|
|
|
|
|
|
|
if (name.trim().length() == 0) {
|
|
|
|
|
|
|
|
throw new RuntimeException("xxl-job method-jobhandler name invalid, for[" + clazz + "#" + methodName + "] .");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (loadJobHandler(name) != null) {
|
|
|
|
|
|
|
|
throw new RuntimeException("xxl-job jobhandler[" + name + "] naming conflicts.");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
executeMethod.setAccessible(true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// init and destroy
|
|
|
|
|
|
|
|
Method initMethod = null;
|
|
|
|
|
|
|
|
Method destroyMethod = null;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (xxlJob.init().trim().length() > 0) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
initMethod = clazz.getDeclaredMethod(xxlJob.init());
|
|
|
|
|
|
|
|
initMethod.setAccessible(true);
|
|
|
|
|
|
|
|
} catch (NoSuchMethodException e) {
|
|
|
|
|
|
|
|
throw new RuntimeException("xxl-job method-jobhandler initMethod invalid, for[" + clazz + "#" + methodName + "] .");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (xxlJob.destroy().trim().length() > 0) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
destroyMethod = clazz.getDeclaredMethod(xxlJob.destroy());
|
|
|
|
|
|
|
|
destroyMethod.setAccessible(true);
|
|
|
|
|
|
|
|
} catch (NoSuchMethodException e) {
|
|
|
|
|
|
|
|
throw new RuntimeException("xxl-job method-jobhandler destroyMethod invalid, for[" + clazz + "#" + methodName + "] .");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// registry jobhandler
|
|
|
|
|
|
|
|
registJobHandler(name, new MethodJobHandler(bean, executeMethod, initMethod, destroyMethod));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ---------------------- admin-client (rpc invoker) ----------------------
|
|
|
|
// ---------------------- admin-client (rpc invoker) ----------------------
|
|
|
|
private static List<AdminBiz> adminBizList;
|
|
|
|
private static List<AdminBiz> adminBizList;
|
|
|
|