|  | @@ -31,87 +31,79 @@ public class XxlJobTrigger {
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      public static void trigger(int jobId) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // load job
 | 
	
		
			
				|  |  | -        XxlJobInfo jobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(jobId);
 | 
	
		
			
				|  |  | +        // load data
 | 
	
		
			
				|  |  | +        XxlJobInfo jobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(jobId);              // job info
 | 
	
		
			
				|  |  | +        XxlJobGroup group = XxlJobDynamicScheduler.xxlJobGroupDao.load(jobInfo.getJobGroup());  // group info
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // log part-1
 | 
	
		
			
				|  |  | +        ExecutorBlockStrategyEnum blockStrategy = ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), ExecutorBlockStrategyEnum.SERIAL_EXECUTION);  // block strategy
 | 
	
		
			
				|  |  | +        ExecutorFailStrategyEnum failStrategy = ExecutorFailStrategyEnum.match(jobInfo.getExecutorFailStrategy(), ExecutorFailStrategyEnum.FAIL_ALARM);    // fail strategy
 | 
	
		
			
				|  |  | +        ExecutorRouteStrategyEnum executorRouteStrategyEnum = ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null);    // route strategy
 | 
	
		
			
				|  |  | +        ArrayList<String> addressList = (ArrayList<String>) group.getRegistryList();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 1、save log-id
 | 
	
		
			
				|  |  |          XxlJobLog jobLog = new XxlJobLog();
 | 
	
		
			
				|  |  |          jobLog.setJobGroup(jobInfo.getJobGroup());
 | 
	
		
			
				|  |  |          jobLog.setJobId(jobInfo.getId());
 | 
	
		
			
				|  |  |          XxlJobDynamicScheduler.xxlJobLogDao.save(jobLog);
 | 
	
		
			
				|  |  |          logger.debug(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // log part-2 param
 | 
	
		
			
				|  |  | +        // 2、prepare trigger-info
 | 
	
		
			
				|  |  |          //jobLog.setExecutorAddress(executorAddress);
 | 
	
		
			
				|  |  |          jobLog.setGlueType(jobInfo.getGlueType());
 | 
	
		
			
				|  |  |          jobLog.setExecutorHandler(jobInfo.getExecutorHandler());
 | 
	
		
			
				|  |  |          jobLog.setExecutorParam(jobInfo.getExecutorParam());
 | 
	
		
			
				|  |  |          jobLog.setTriggerTime(new Date());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // trigger request
 | 
	
		
			
				|  |  | -        TriggerParam triggerParam = new TriggerParam();
 | 
	
		
			
				|  |  | -        triggerParam.setJobId(jobInfo.getId());
 | 
	
		
			
				|  |  | -        triggerParam.setExecutorHandler(jobInfo.getExecutorHandler());
 | 
	
		
			
				|  |  | -        triggerParam.setExecutorParams(jobInfo.getExecutorParam());
 | 
	
		
			
				|  |  | -        triggerParam.setExecutorBlockStrategy(jobInfo.getExecutorBlockStrategy());
 | 
	
		
			
				|  |  | -        triggerParam.setGlueType(jobInfo.getGlueType());
 | 
	
		
			
				|  |  | -        triggerParam.setGlueSource(jobInfo.getGlueSource());
 | 
	
		
			
				|  |  | -        triggerParam.setGlueUpdatetime(jobInfo.getGlueUpdatetime().getTime());
 | 
	
		
			
				|  |  | -        triggerParam.setLogId(jobLog.getId());
 | 
	
		
			
				|  |  | -        triggerParam.setLogDateTim(jobLog.getTriggerTime().getTime());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // do trigger
 | 
	
		
			
				|  |  | -        ReturnT<String> triggerResult = doTrigger(triggerParam, jobInfo, jobLog);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // fail retry
 | 
	
		
			
				|  |  | -        if (triggerResult.getCode()==ReturnT.FAIL_CODE &&
 | 
	
		
			
				|  |  | -                ExecutorFailStrategyEnum.match(jobInfo.getExecutorFailStrategy(), null) == ExecutorFailStrategyEnum.FAIL_RETRY) {
 | 
	
		
			
				|  |  | -            ReturnT<String> retryTriggerResult = doTrigger(triggerParam, jobInfo, jobLog);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            triggerResult.setCode(retryTriggerResult.getCode());
 | 
	
		
			
				|  |  | -            triggerResult.setMsg(triggerResult.getMsg() + "<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>失败重试<<<<<<<<<<< </span><br><br>" +retryTriggerResult.getMsg());
 | 
	
		
			
				|  |  | +        ReturnT<String> triggerResult = new ReturnT<String>(null);
 | 
	
		
			
				|  |  | +        StringBuffer triggerMsgSb = new StringBuffer();
 | 
	
		
			
				|  |  | +        triggerMsgSb.append("注册方式:").append( (group.getAddressType() == 0)?"自动注册":"手动录入" );
 | 
	
		
			
				|  |  | +        triggerMsgSb.append("<br>阻塞处理策略:").append(blockStrategy.getTitle());
 | 
	
		
			
				|  |  | +        triggerMsgSb.append("<br>失败处理策略:").append(failStrategy.getTitle());
 | 
	
		
			
				|  |  | +        triggerMsgSb.append("<br>地址列表:").append(group.getRegistryList());
 | 
	
		
			
				|  |  | +        triggerMsgSb.append("<br>路由策略:").append(executorRouteStrategyEnum.getTitle());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 3、trigger-valid
 | 
	
		
			
				|  |  | +        if (triggerResult.getCode()==ReturnT.SUCCESS_CODE && CollectionUtils.isEmpty(addressList)) {
 | 
	
		
			
				|  |  | +            triggerResult.setCode(ReturnT.FAIL_CODE);
 | 
	
		
			
				|  |  | +            triggerMsgSb.append("<br>----------------------<br>").append("调度失败:").append("执行器地址为空");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (triggerResult.getCode() == ReturnT.SUCCESS_CODE && executorRouteStrategyEnum == null) {
 | 
	
		
			
				|  |  | +            triggerResult.setCode(ReturnT.FAIL_CODE);
 | 
	
		
			
				|  |  | +            triggerMsgSb.append("<br>----------------------<br>").append("调度失败:").append("执行器路由策略为空");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (triggerResult.getCode() == ReturnT.SUCCESS_CODE) {
 | 
	
		
			
				|  |  | +            // 4.1、trigger-param
 | 
	
		
			
				|  |  | +            TriggerParam triggerParam = new TriggerParam();
 | 
	
		
			
				|  |  | +            triggerParam.setJobId(jobInfo.getId());
 | 
	
		
			
				|  |  | +            triggerParam.setExecutorHandler(jobInfo.getExecutorHandler());
 | 
	
		
			
				|  |  | +            triggerParam.setExecutorParams(jobInfo.getExecutorParam());
 | 
	
		
			
				|  |  | +            triggerParam.setExecutorBlockStrategy(jobInfo.getExecutorBlockStrategy());
 | 
	
		
			
				|  |  | +            triggerParam.setGlueType(jobInfo.getGlueType());
 | 
	
		
			
				|  |  | +            triggerParam.setGlueSource(jobInfo.getGlueSource());
 | 
	
		
			
				|  |  | +            triggerParam.setGlueUpdatetime(jobInfo.getGlueUpdatetime().getTime());
 | 
	
		
			
				|  |  | +            triggerParam.setLogId(jobLog.getId());
 | 
	
		
			
				|  |  | +            triggerParam.setLogDateTim(jobLog.getTriggerTime().getTime());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 4.2、trigger-run (route run / trigger remote executor)
 | 
	
		
			
				|  |  | +            triggerResult = executorRouteStrategyEnum.getRouter().routeRun(triggerParam, addressList, jobLog);
 | 
	
		
			
				|  |  | +            triggerMsgSb.append("<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>触发调度<<<<<<<<<<< </span><br>").append(triggerResult.getMsg());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 4.3、trigger (fail retry)
 | 
	
		
			
				|  |  | +            if (triggerResult.getCode()!=ReturnT.SUCCESS_CODE && failStrategy == ExecutorFailStrategyEnum.FAIL_RETRY) {
 | 
	
		
			
				|  |  | +                triggerResult = executorRouteStrategyEnum.getRouter().routeRun(triggerParam, addressList, jobLog);
 | 
	
		
			
				|  |  | +                triggerMsgSb.append("<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>失败重试<<<<<<<<<<< </span><br>").append(triggerResult.getMsg());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // log part-2
 | 
	
		
			
				|  |  | +        // 5、save trigger-info
 | 
	
		
			
				|  |  |          jobLog.setTriggerCode(triggerResult.getCode());
 | 
	
		
			
				|  |  | -        jobLog.setTriggerMsg(triggerResult.getMsg());
 | 
	
		
			
				|  |  | +        jobLog.setTriggerMsg(triggerMsgSb.toString());
 | 
	
		
			
				|  |  |          XxlJobDynamicScheduler.xxlJobLogDao.updateTriggerInfo(jobLog);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // monitor triger
 | 
	
		
			
				|  |  | +        // 6、monitor triger
 | 
	
		
			
				|  |  |          JobFailMonitorHelper.monitor(jobLog.getId());
 | 
	
		
			
				|  |  |          logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId());
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    private static ReturnT<String> doTrigger(TriggerParam triggerParam, XxlJobInfo jobInfo, XxlJobLog jobLog){
 | 
	
		
			
				|  |  | -        StringBuffer triggerSb = new StringBuffer();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // exerutor address list
 | 
	
		
			
				|  |  | -        XxlJobGroup group = XxlJobDynamicScheduler.xxlJobGroupDao.load(jobInfo.getJobGroup());
 | 
	
		
			
				|  |  | -        triggerSb.append( (group.getAddressType() == 0)?"注册方式:自动注册":"注册方式:手动录入" );
 | 
	
		
			
				|  |  | -        ArrayList<String> addressList = (ArrayList<String>) group.getRegistryList();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        triggerSb.append("<br>阻塞处理策略:").append(ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), ExecutorBlockStrategyEnum.SERIAL_EXECUTION).getTitle());
 | 
	
		
			
				|  |  | -        triggerSb.append("<br>失败处理策略:").append(ExecutorFailStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), ExecutorFailStrategyEnum.FAIL_ALARM).getTitle());
 | 
	
		
			
				|  |  | -        triggerSb.append("<br>地址列表:").append(addressList!=null?addressList.toString():"");
 | 
	
		
			
				|  |  | -        if (CollectionUtils.isEmpty(addressList)) {
 | 
	
		
			
				|  |  | -            triggerSb.append("<br>----------------------<br>").append("调度失败:").append("执行器地址为空");
 | 
	
		
			
				|  |  | -            return new ReturnT<String>(ReturnT.FAIL_CODE, triggerSb.toString());
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // executor route strategy
 | 
	
		
			
				|  |  | -        ExecutorRouteStrategyEnum executorRouteStrategyEnum = ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null);
 | 
	
		
			
				|  |  | -        if (executorRouteStrategyEnum == null) {
 | 
	
		
			
				|  |  | -            triggerSb.append("<br>----------------------<br>").append("调度失败:").append("执行器路由策略为空");
 | 
	
		
			
				|  |  | -            return new ReturnT<String>(ReturnT.FAIL_CODE, triggerSb.toString());
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        triggerSb.append("<br>路由策略:").append(executorRouteStrategyEnum.name() + "-" + executorRouteStrategyEnum.getTitle());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // route run / trigger remote executor
 | 
	
		
			
				|  |  | -        ReturnT<String> routeRunResult = executorRouteStrategyEnum.getRouter().routeRun(triggerParam, addressList, jobLog);
 | 
	
		
			
				|  |  | -        triggerSb.append("<br>----------------------<br>").append(routeRunResult.getMsg());
 | 
	
		
			
				|  |  | -        return new ReturnT<String>(routeRunResult.getCode(), triggerSb.toString());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  }
 |