|
|
|
@ -38,6 +38,10 @@ public class HandlerRepository {
|
|
|
|
|
* job name
|
|
|
|
|
*/
|
|
|
|
|
JOB_NAME,
|
|
|
|
|
/**
|
|
|
|
|
* params of jobhandler
|
|
|
|
|
*/
|
|
|
|
|
EXECUTOR_HANDLER,
|
|
|
|
|
/**
|
|
|
|
|
* params of jobhandler
|
|
|
|
|
*/
|
|
|
|
@ -61,14 +65,20 @@ public class HandlerRepository {
|
|
|
|
|
}
|
|
|
|
|
public enum ActionEnum{RUN, KILL, LOG, BEAT}
|
|
|
|
|
|
|
|
|
|
public static ConcurrentHashMap<String, HandlerThread> handlerTreadMap = new ConcurrentHashMap<String, HandlerThread>();
|
|
|
|
|
// jobhandler repository
|
|
|
|
|
private static ConcurrentHashMap<String, IJobHandler> handlerRepository = new ConcurrentHashMap<String, IJobHandler>();
|
|
|
|
|
public static void registJobHandler(String name, IJobHandler jobHandler){
|
|
|
|
|
handlerRepository.put(name, jobHandler);
|
|
|
|
|
logger.info("xxl-job register jobhandler success, name:{}, jobHandler:{}", name, jobHandler);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// regist handler
|
|
|
|
|
public static void regist(String handleName, IJobHandler handler){
|
|
|
|
|
// thread repository of jobhandler
|
|
|
|
|
public static ConcurrentHashMap<String, HandlerThread> handlerTreadMap = new ConcurrentHashMap<String, HandlerThread>();
|
|
|
|
|
public static HandlerThread registJobHandlerThread(String jobkey, IJobHandler handler){
|
|
|
|
|
HandlerThread handlerThread = new HandlerThread(handler);
|
|
|
|
|
handlerThread.start();
|
|
|
|
|
handlerTreadMap.put(handleName, handlerThread); // putIfAbsent
|
|
|
|
|
logger.info(">>>>>>>>>>> xxl-job regist handler success, handleName:{}, handler:{}", new Object[]{handleName, handler});
|
|
|
|
|
logger.info(">>>>>>>>>>> xxl-job regist handler success, jobkey:{}, handler:{}", new Object[]{jobkey, handler});
|
|
|
|
|
return handlerTreadMap.put(jobkey, handlerThread); // putIfAbsent
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// handler push to queue
|
|
|
|
@ -110,20 +120,40 @@ public class HandlerRepository {
|
|
|
|
|
return JacksonUtil.writeValueAsString(callback);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// load old thread
|
|
|
|
|
String jobKey = job_group.concat("_").concat(job_name);
|
|
|
|
|
HandlerThread handlerThread = handlerTreadMap.get(jobKey);
|
|
|
|
|
|
|
|
|
|
if ("0".equals(handler_glue_switch)) {
|
|
|
|
|
// bean model
|
|
|
|
|
|
|
|
|
|
// handler name
|
|
|
|
|
String executor_handler = _param.get(HandlerParamEnum.EXECUTOR_HANDLER.name());
|
|
|
|
|
if (executor_handler==null || executor_handler.trim().length()==0){
|
|
|
|
|
callback.setMsg("EXECUTOR_HANDLER is null.");
|
|
|
|
|
return JacksonUtil.writeValueAsString(callback);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// handler instance
|
|
|
|
|
IJobHandler jobHandler = handlerRepository.get(executor_handler);
|
|
|
|
|
|
|
|
|
|
if (handlerThread == null) {
|
|
|
|
|
// jobhandler match
|
|
|
|
|
if (jobHandler==null) {
|
|
|
|
|
callback.setMsg("handler for jobKey=[" + jobKey + "] not found.");
|
|
|
|
|
return JacksonUtil.writeValueAsString(callback);
|
|
|
|
|
}
|
|
|
|
|
handlerThread = HandlerRepository.registJobHandlerThread(jobKey, jobHandler);
|
|
|
|
|
} else {
|
|
|
|
|
if (handlerThread.getHandler() != jobHandler) {
|
|
|
|
|
handlerThread = HandlerRepository.registJobHandlerThread(jobKey, jobHandler);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// glue
|
|
|
|
|
if (handlerThread==null) {
|
|
|
|
|
HandlerRepository.regist(jobKey, new GlueJobHandler(job_group, job_name));
|
|
|
|
|
if (handlerThread == null) {
|
|
|
|
|
handlerThread = HandlerRepository.registJobHandlerThread(jobKey, new GlueJobHandler(job_group, job_name));
|
|
|
|
|
}
|
|
|
|
|
handlerThread = handlerTreadMap.get(jobKey);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// push data to queue
|
|
|
|
@ -145,7 +175,7 @@ public class HandlerRepository {
|
|
|
|
|
IJobHandler handler = handlerThread.getHandler();
|
|
|
|
|
handlerThread.toStop();
|
|
|
|
|
handlerThread.interrupt();
|
|
|
|
|
regist(jobKey, handler);
|
|
|
|
|
HandlerRepository.registJobHandlerThread(jobKey, handler);
|
|
|
|
|
callback.setStatus(RemoteCallBack.SUCCESS);
|
|
|
|
|
} else {
|
|
|
|
|
callback.setMsg("handler for jobKey=[" + jobKey + "] not found.");
|
|
|
|
|