|
|
|
@ -3,6 +3,7 @@ package com.xxl.job.core.executor;
|
|
|
|
|
import com.xxl.job.core.biz.AdminBiz;
|
|
|
|
|
import com.xxl.job.core.biz.client.AdminBizClient;
|
|
|
|
|
import com.xxl.job.core.handler.IJobHandler;
|
|
|
|
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
|
|
|
|
import com.xxl.job.core.log.XxlJobFileAppender;
|
|
|
|
|
import com.xxl.job.core.server.EmbedServer;
|
|
|
|
|
import com.xxl.job.core.thread.JobLogFileCleanThread;
|
|
|
|
@ -12,10 +13,14 @@ import com.xxl.job.core.util.IpUtil;
|
|
|
|
|
import com.xxl.job.core.util.NetUtil;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
import top.jfunc.common.utils.BeanUtil;
|
|
|
|
|
import top.jfunc.common.utils.ClassUtil;
|
|
|
|
|
import top.jfunc.common.utils.StrUtil;
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
import java.util.concurrent.ConcurrentMap;
|
|
|
|
|
|
|
|
|
@ -176,7 +181,33 @@ public class XxlJobExecutor {
|
|
|
|
|
logger.info(">>>>>>>>>>> xxl-job register jobhandler success, name:{}, jobHandler:{}", name, jobHandler);
|
|
|
|
|
return jobHandlerRepository.put(name, jobHandler);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 根据包扫描结果注册{@link IJobHandler},包下所有{@link IJobHandler}子类都扫描进
|
|
|
|
|
*/
|
|
|
|
|
public static void registJobHandler(String... packages){
|
|
|
|
|
for (String onePackage : packages) {
|
|
|
|
|
Set<Class<?>> jobHandlerClasses = ClassUtil.scanPackageBySuper(onePackage, true, IJobHandler.class);
|
|
|
|
|
for (Class<?> jobHandlerClass : jobHandlerClasses) {
|
|
|
|
|
String name = determineHandlerName(jobHandlerClass);
|
|
|
|
|
IJobHandler jobHandler = BeanUtil.newInstance(jobHandlerClass);
|
|
|
|
|
registJobHandler(name , jobHandler);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 名字默认是类名首字母小写,可以使用{@link XxlJob}修改名称
|
|
|
|
|
*/
|
|
|
|
|
private static String determineHandlerName(Class<?> jobHandlerClass) {
|
|
|
|
|
String name = StrUtil.lowerFirst(jobHandlerClass.getSimpleName());
|
|
|
|
|
if(jobHandlerClass.isAnnotationPresent(XxlJob.class)){
|
|
|
|
|
String value = jobHandlerClass.getAnnotation(XxlJob.class).value();
|
|
|
|
|
if(!"".equals(value)){
|
|
|
|
|
name = value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return name;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ---------------------- job thread repository ----------------------
|
|
|
|
|
private static ConcurrentMap<Integer, JobThread> jobThreadRepository = new ConcurrentHashMap<Integer, JobThread>();
|
|
|
|
|