|  | @@ -91,86 +91,94 @@ public class JobThread extends Thread{
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |  	public void run() {
 | 
	
		
			
				|  |  | -		while(!toStop){
 | 
	
		
			
				|  |  | -			running = false;
 | 
	
		
			
				|  |  | -			idleTimes++;
 | 
	
		
			
				|  |  | -			try {
 | 
	
		
			
				|  |  | -				// to check toStop signal, we need cycle, so wo cannot use queue.take(), instand of poll(timeout)
 | 
	
		
			
				|  |  | -				TriggerParam triggerParam = triggerQueue.poll(3L, TimeUnit.SECONDS);
 | 
	
		
			
				|  |  | -				if (triggerParam!=null) {
 | 
	
		
			
				|  |  | -					running = true;
 | 
	
		
			
				|  |  | -					idleTimes = 0;
 | 
	
		
			
				|  |  | -					triggerLogIdSet.remove(triggerParam.getLogId());
 | 
	
		
			
				|  |  | -					
 | 
	
		
			
				|  |  | -					// parse param
 | 
	
		
			
				|  |  | -					String[] handlerParams = (triggerParam.getExecutorParams()!=null && triggerParam.getExecutorParams().trim().length()>0)
 | 
	
		
			
				|  |  | -							? (String[])(Arrays.asList(triggerParam.getExecutorParams().split(",")).toArray()) : null;
 | 
	
		
			
				|  |  | -					
 | 
	
		
			
				|  |  | -					// handle job
 | 
	
		
			
				|  |  | -					ReturnT<String> executeResult = null;
 | 
	
		
			
				|  |  | -					try {
 | 
	
		
			
				|  |  | -						// log filename: yyyy-MM-dd/9999.log
 | 
	
		
			
				|  |  | -						String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerParam.getLogDateTim()), triggerParam.getLogId());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -						XxlJobFileAppender.contextHolder.set(logFileName);
 | 
	
		
			
				|  |  | -						ShardingUtil.setShardingVo(new ShardingUtil.ShardingVO(triggerParam.getBroadcastIndex(), triggerParam.getBroadcastTotal()));
 | 
	
		
			
				|  |  | -						XxlJobLogger.log("<br>----------- xxl-job job execute start -----------<br>----------- Params:" + Arrays.toString(handlerParams));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -						executeResult = handler.execute(handlerParams);
 | 
	
		
			
				|  |  | -						if (executeResult == null) {
 | 
	
		
			
				|  |  | -							executeResult = ReturnT.FAIL;
 | 
	
		
			
				|  |  | -						}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -						XxlJobLogger.log("<br>----------- xxl-job job execute end(finish) -----------<br>----------- ReturnT:" + executeResult);
 | 
	
		
			
				|  |  | -					} catch (Exception e) {
 | 
	
		
			
				|  |  | -						if (toStop) {
 | 
	
		
			
				|  |  | -							XxlJobLogger.log("<br>----------- JobThread toStop, stopReason:" + stopReason);
 | 
	
		
			
				|  |  | -						}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -						StringWriter stringWriter = new StringWriter();
 | 
	
		
			
				|  |  | -						e.printStackTrace(new PrintWriter(stringWriter));
 | 
	
		
			
				|  |  | -						String errorMsg = stringWriter.toString();
 | 
	
		
			
				|  |  | -						executeResult = new ReturnT<String>(ReturnT.FAIL_CODE, errorMsg);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -						XxlJobLogger.log("<br>----------- JobThread Exception:" + errorMsg + "<br>----------- xxl-job job execute end(error) -----------");
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -					
 | 
	
		
			
				|  |  | -					// callback handler info
 | 
	
		
			
				|  |  | -					if (!toStop) {
 | 
	
		
			
				|  |  | -						// commonm
 | 
	
		
			
				|  |  | -						TriggerCallbackThread.pushCallBack(new HandleCallbackParam(triggerParam.getLogId(), executeResult));
 | 
	
		
			
				|  |  | -					} else {
 | 
	
		
			
				|  |  | -						// is killed
 | 
	
		
			
				|  |  | -						ReturnT<String> stopResult = new ReturnT<String>(ReturnT.FAIL_CODE, stopReason + " [业务运行中,被强制终止]");
 | 
	
		
			
				|  |  | -						TriggerCallbackThread.pushCallBack(new HandleCallbackParam(triggerParam.getLogId(), stopResult));
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -				} else {
 | 
	
		
			
				|  |  | -					if (idleTimes > 30) {
 | 
	
		
			
				|  |  | -						XxlJobExecutor.removeJobThread(jobId, "excutor idel times over limit.");
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			} catch (Throwable e) {
 | 
	
		
			
				|  |  | -				if (toStop) {
 | 
	
		
			
				|  |  | -					XxlJobLogger.log("<br>----------- xxl-job toStop, stopReason:" + stopReason);
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				StringWriter stringWriter = new StringWriter();
 | 
	
		
			
				|  |  | -				e.printStackTrace(new PrintWriter(stringWriter));
 | 
	
		
			
				|  |  | -				String errorMsg = stringWriter.toString();
 | 
	
		
			
				|  |  | -				XxlJobLogger.log("----------- xxl-job JobThread Exception:" + errorMsg);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		
 | 
	
		
			
				|  |  | -		// callback trigger request in queue
 | 
	
		
			
				|  |  | -		while(triggerQueue !=null && triggerQueue.size()>0){
 | 
	
		
			
				|  |  | -			TriggerParam triggerParam = triggerQueue.poll();
 | 
	
		
			
				|  |  | -			if (triggerParam!=null) {
 | 
	
		
			
				|  |  | -				// is killed
 | 
	
		
			
				|  |  | -				ReturnT<String> stopResult = new ReturnT<String>(ReturnT.FAIL_CODE, stopReason + " [任务尚未执行,在调度队列中被终止]");
 | 
	
		
			
				|  |  | -				TriggerCallbackThread.pushCallBack(new HandleCallbackParam(triggerParam.getLogId(), stopResult));
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		
 | 
	
		
			
				|  |  | -		logger.info(">>>>>>>>>>> xxl-job JobThread stoped, hashCode:{}", Thread.currentThread());
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        while(!toStop){
 | 
	
		
			
				|  |  | +            running = false;
 | 
	
		
			
				|  |  | +            idleTimes++;
 | 
	
		
			
				|  |  | +            // handle job
 | 
	
		
			
				|  |  | +            ReturnT<String> executeResult = null;
 | 
	
		
			
				|  |  | +            TriggerParam triggerParam = null;
 | 
	
		
			
				|  |  | +            try {
 | 
	
		
			
				|  |  | +                // to check toStop signal, we need cycle, so wo cannot use queue.take(), instand of poll(timeout)
 | 
	
		
			
				|  |  | +                triggerParam = triggerQueue.poll(3L, TimeUnit.SECONDS);
 | 
	
		
			
				|  |  | +                if (triggerParam!=null) {
 | 
	
		
			
				|  |  | +                    running = true;
 | 
	
		
			
				|  |  | +                    idleTimes = 0;
 | 
	
		
			
				|  |  | +                    triggerLogIdSet.remove(triggerParam.getLogId());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    // parse param
 | 
	
		
			
				|  |  | +                    String[] handlerParams = (triggerParam.getExecutorParams()!=null && triggerParam.getExecutorParams().trim().length()>0)
 | 
	
		
			
				|  |  | +                        ? (String[])(Arrays.asList(triggerParam.getExecutorParams().split(" ")).toArray()) : null;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    try {
 | 
	
		
			
				|  |  | +                        // log filename: yyyy-MM-dd/9999.log
 | 
	
		
			
				|  |  | +                        String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerParam.getLogDateTim()), triggerParam.getLogId());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        XxlJobFileAppender.contextHolder.set(logFileName);
 | 
	
		
			
				|  |  | +                        ShardingUtil.setShardingVo(new ShardingUtil.ShardingVO(triggerParam.getBroadcastIndex(), triggerParam.getBroadcastTotal()));
 | 
	
		
			
				|  |  | +                        XxlJobLogger.log("<br>----------- xxl-job job execute start -----------<br>----------- Params:" + Arrays.toString(handlerParams));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        executeResult = handler.execute(handlerParams);
 | 
	
		
			
				|  |  | +                        if (executeResult == null) {
 | 
	
		
			
				|  |  | +                            executeResult = ReturnT.FAIL;
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        XxlJobLogger.log("<br>----------- xxl-job job execute end(finish) -----------<br>----------- ReturnT:" + executeResult);
 | 
	
		
			
				|  |  | +                    } catch (Exception e) {
 | 
	
		
			
				|  |  | +                        if (toStop) {
 | 
	
		
			
				|  |  | +                            XxlJobLogger.log("<br>----------- JobThread toStop, stopReason:" + stopReason);
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        StringWriter stringWriter = new StringWriter();
 | 
	
		
			
				|  |  | +                        e.printStackTrace(new PrintWriter(stringWriter));
 | 
	
		
			
				|  |  | +                        String errorMsg = stringWriter.toString();
 | 
	
		
			
				|  |  | +                        executeResult = new ReturnT<String>(ReturnT.FAIL_CODE, errorMsg);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        XxlJobLogger.log("<br>----------- JobThread Exception:" + errorMsg + "<br>----------- xxl-job job execute end(error) -----------");
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    if (idleTimes > 30) {
 | 
	
		
			
				|  |  | +                        XxlJobExecutor.removeJobThread(jobId, "excutor idel times over limit.");
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            } catch (Throwable e) {
 | 
	
		
			
				|  |  | +                if (toStop) {
 | 
	
		
			
				|  |  | +                    XxlJobLogger.log("<br>----------- xxl-job toStop, stopReason:" + stopReason);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                StringWriter stringWriter = new StringWriter();
 | 
	
		
			
				|  |  | +                e.printStackTrace(new PrintWriter(stringWriter));
 | 
	
		
			
				|  |  | +                String errorMsg = stringWriter.toString();
 | 
	
		
			
				|  |  | +                executeResult = new ReturnT<String>(ReturnT.FAIL_CODE, errorMsg);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                XxlJobLogger.log("----------- xxl-job JobThread Exception:" + errorMsg);
 | 
	
		
			
				|  |  | +            } finally {
 | 
	
		
			
				|  |  | +                if(triggerParam != null) {
 | 
	
		
			
				|  |  | +                    // callback handler info
 | 
	
		
			
				|  |  | +                    if (!toStop) {
 | 
	
		
			
				|  |  | +                        // commonm
 | 
	
		
			
				|  |  | +                        TriggerCallbackThread.pushCallBack(new HandleCallbackParam(triggerParam.getLogId(), executeResult));
 | 
	
		
			
				|  |  | +                    } else {
 | 
	
		
			
				|  |  | +                        // is killed
 | 
	
		
			
				|  |  | +                        ReturnT<String> stopResult = new ReturnT<String>(ReturnT.FAIL_CODE, stopReason + " [业务运行中,被强制终止]");
 | 
	
		
			
				|  |  | +                        TriggerCallbackThread.pushCallBack(new HandleCallbackParam(triggerParam.getLogId(), stopResult));
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // callback trigger request in queue
 | 
	
		
			
				|  |  | +        while(triggerQueue !=null && triggerQueue.size()>0){
 | 
	
		
			
				|  |  | +            TriggerParam triggerParam = triggerQueue.poll();
 | 
	
		
			
				|  |  | +            if (triggerParam!=null) {
 | 
	
		
			
				|  |  | +                // is killed
 | 
	
		
			
				|  |  | +                ReturnT<String> stopResult = new ReturnT<String>(ReturnT.FAIL_CODE, stopReason + " [任务尚未执行,在调度队列中被终止]");
 | 
	
		
			
				|  |  | +                TriggerCallbackThread.pushCallBack(new HandleCallbackParam(triggerParam.getLogId(), stopResult));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        logger.info(">>>>>>>>>>>> xxl-job JobThread stoped, hashCode:{}", Thread.currentThread());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 |