| 
					
				 | 
			
			
				@@ -30,7 +30,6 @@ import javax.servlet.http.HttpServletRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.servlet.http.HttpServletResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.io.IOException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.HashSet; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.concurrent.ConcurrentHashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -93,6 +92,7 @@ public final class XxlJobDynamicScheduler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // ---------------------- admin rpc provider (no server version) ---------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private static JettyServerHandler jettyServerHandler; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private void initRpcProvider(){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -137,6 +137,7 @@ public final class XxlJobDynamicScheduler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return executorBiz; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // ---------------------- schedule util ---------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -145,50 +146,39 @@ public final class XxlJobDynamicScheduler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param jobInfo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public static void fillJobInfo(XxlJobInfo jobInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// TriggerKey : name + group 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String group = String.valueOf(jobInfo.getJobGroup()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String name = String.valueOf(jobInfo.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        TriggerKey triggerKey = TriggerKey.triggerKey(name, group); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // trigger key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        TriggerKey triggerKey = TriggerKey.triggerKey(name, group); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Trigger trigger = scheduler.getTrigger(triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			TriggerState triggerState = scheduler.getTriggerState(triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// parse params 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // trigger cron 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Trigger trigger = scheduler.getTrigger(triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if (trigger!=null && trigger instanceof CronTriggerImpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				String cronExpression = ((CronTriggerImpl) trigger).getCronExpression(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				jobInfo.setJobCron(cronExpression); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//JobKey jobKey = new JobKey(jobInfo.getJobName(), String.valueOf(jobInfo.getJobGroup())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //JobDetail jobDetail = scheduler.getJobDetail(jobKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //String jobClass = jobDetail.getJobClass().getName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // trigger state 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            TriggerState triggerState = scheduler.getTriggerState(triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if (triggerState!=null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				jobInfo.setJobStatus(triggerState.name()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //JobKey jobKey = new JobKey(jobInfo.getJobName(), String.valueOf(jobInfo.getJobGroup())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //JobDetail jobDetail = scheduler.getJobDetail(jobKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //String jobClass = jobDetail.getJobClass().getName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} catch (SchedulerException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			logger.error(e.getMessage(), e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * check if exists 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param jobName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param jobGroup 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @throws SchedulerException 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public static boolean checkExists(String jobName, String jobGroup) throws SchedulerException{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return scheduler.checkExists(triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * addJob 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * add trigger + job 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param jobName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param jobGroup 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -197,113 +187,109 @@ public final class XxlJobDynamicScheduler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @throws SchedulerException 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public static boolean addJob(String jobName, String jobGroup, String cronExpression) throws SchedulerException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    	// TriggerKey : name + group 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	// 1、job key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         JobKey jobKey = new JobKey(jobName, jobGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // TriggerKey valid if_exists 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (checkExists(jobName, jobGroup)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            logger.info(">>>>>>>>> addJob fail, job already exist, jobGroup:{}, jobName:{}", jobGroup, jobName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 2、valid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (scheduler.checkExists(triggerKey)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true;    // PASS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // CronTrigger : TriggerKey + cronExpression	// withMisfireHandlingInstructionDoNothing 忽略掉调度终止过程中忽略的调度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 3、corn trigger 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();   // withMisfireHandlingInstructionDoNothing 忽略掉调度终止过程中忽略的调度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // JobDetail : jobClass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 4、job detail 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Class<? extends Job> jobClass_ = RemoteHttpJobBean.class;   // Class.forName(jobInfo.getJobClass()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		JobDetail jobDetail = JobBuilder.newJob(jobClass_).withIdentity(jobKey).build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         /*if (jobInfo.getJobData()!=null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         	JobDataMap jobDataMap = jobDetail.getJobDataMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         	jobDataMap.putAll(JacksonUtil.readValue(jobInfo.getJobData(), Map.class));	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         	// JobExecutionContext context.getMergedJobDataMap().get("mailGuid"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // schedule : jobDetail + cronTrigger 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 5、schedule job 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Date date = scheduler.scheduleJob(jobDetail, cronTrigger); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         logger.info(">>>>>>>>>>> addJob success, jobDetail:{}, cronTrigger:{}, date:{}", jobDetail, cronTrigger, date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * rescheduleJob 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * remove trigger + job 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param jobGroup 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param jobName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param cronExpression 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param jobGroup 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @throws SchedulerException 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public static boolean rescheduleJob(String jobGroup, String jobName, String cronExpression) throws SchedulerException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    	// TriggerKey valid if_exists 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (!checkExists(jobName, jobGroup)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        	logger.info(">>>>>>>>>>> rescheduleJob fail, job not exists, JobGroup:{}, JobName:{}", jobGroup, jobName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // TriggerKey : name + group 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        CronTrigger oldTrigger = (CronTrigger) scheduler.getTrigger(triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (oldTrigger != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // avoid repeat 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            String oldCron = oldTrigger.getCronExpression(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (oldCron.equals(cronExpression)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static boolean removeJob(String jobName, String jobGroup) throws SchedulerException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // CronTrigger : TriggerKey + cronExpression 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            oldTrigger = oldTrigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // rescheduleJob 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            scheduler.rescheduleJob(triggerKey, oldTrigger); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // CronTrigger : TriggerKey + cronExpression 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // JobDetail-JobDataMap fresh 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            JobKey jobKey = new JobKey(jobName, jobGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            JobDetail jobDetail = scheduler.getJobDetail(jobKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            /*JobDataMap jobDataMap = jobDetail.getJobDataMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            jobDataMap.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            jobDataMap.putAll(JacksonUtil.readValue(jobInfo.getJobData(), Map.class));*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // Trigger fresh 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            HashSet<Trigger> triggerSet = new HashSet<Trigger>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            triggerSet.add(cronTrigger); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            scheduler.scheduleJob(jobDetail, triggerSet, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (scheduler.checkExists(triggerKey)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            scheduler.unscheduleJob(triggerKey);    // trigger + job 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        logger.info(">>>>>>>>>>> resumeJob success, JobGroup:{}, JobName:{}", jobGroup, jobName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        logger.info(">>>>>>>>>>> removeJob success, triggerKey:{}", triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * unscheduleJob 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * updateJobCron 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param jobName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param jobGroup 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param jobName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param cronExpression 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @throws SchedulerException 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public static boolean removeJob(String jobName, String jobGroup) throws SchedulerException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    	// TriggerKey : name + group 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public static boolean updateJobCron(String jobGroup, String jobName, String cronExpression) throws SchedulerException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 1、job key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        boolean result = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (checkExists(jobName, jobGroup)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            result = scheduler.unscheduleJob(triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            logger.info(">>>>>>>>>>> removeJob, triggerKey:{}, result [{}]", triggerKey, result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 2、valid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!scheduler.checkExists(triggerKey)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true;    // PASS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CronTrigger oldTrigger = (CronTrigger) scheduler.getTrigger(triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 3、avoid repeat cron 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String oldCron = oldTrigger.getCronExpression(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (oldCron.equals(cronExpression)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true;    // PASS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 4、new cron trigger 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        oldTrigger = oldTrigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 5、rescheduleJob 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        scheduler.rescheduleJob(triggerKey, oldTrigger); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JobKey jobKey = new JobKey(jobName, jobGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // old job detail 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JobDetail jobDetail = scheduler.getJobDetail(jobKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // new trigger 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        HashSet<Trigger> triggerSet = new HashSet<Trigger>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        triggerSet.add(cronTrigger); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // cover trigger of job detail 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        scheduler.scheduleJob(jobDetail, triggerSet, true);*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        logger.info(">>>>>>>>>>> resumeJob success, JobGroup:{}, JobName:{}", jobGroup, jobName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * pause 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -312,21 +298,21 @@ public final class XxlJobDynamicScheduler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @throws SchedulerException 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public static boolean pauseJob(String jobName, String jobGroup) throws SchedulerException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    	// TriggerKey : name + group 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /*public static boolean pauseJob(String jobName, String jobGroup) throws SchedulerException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     	TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         boolean result = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (checkExists(jobName, jobGroup)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (scheduler.checkExists(triggerKey)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             scheduler.pauseTrigger(triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            result = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            logger.info(">>>>>>>>>>> pauseJob success, triggerKey:{}", triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        	logger.info(">>>>>>>>>>> pauseJob fail, triggerKey:{}", triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            result =  true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        logger.info(">>>>>>>>>>> pauseJob {}, triggerKey:{}", (result?"success":"fail"),triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * resume 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -335,21 +321,21 @@ public final class XxlJobDynamicScheduler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @throws SchedulerException 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public static boolean resumeJob(String jobName, String jobGroup) throws SchedulerException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    	// TriggerKey : name + group 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    	TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /*public static boolean resumeJob(String jobName, String jobGroup) throws SchedulerException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         boolean result = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (checkExists(jobName, jobGroup)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (scheduler.checkExists(triggerKey)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             scheduler.resumeTrigger(triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             result = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            logger.info(">>>>>>>>>>> resumeJob success, triggerKey:{}", triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        	logger.info(">>>>>>>>>>> resumeJob fail, triggerKey:{}", triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        logger.info(">>>>>>>>>>> resumeJob {}, triggerKey:{}", (result?"success":"fail"), triggerKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * run 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -358,12 +344,13 @@ public final class XxlJobDynamicScheduler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @throws SchedulerException 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public static boolean triggerJob(String jobName, String jobGroup) throws SchedulerException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /*public static boolean triggerJob(String jobName, String jobGroup) throws SchedulerException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     	// TriggerKey : name + group 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     	JobKey jobKey = new JobKey(jobName, jobGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         boolean result = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (checkExists(jobName, jobGroup)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (scheduler.checkExists(triggerKey)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             scheduler.triggerJob(jobKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             result = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             logger.info(">>>>>>>>>>> runJob success, jobKey:{}", jobKey); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -371,7 +358,7 @@ public final class XxlJobDynamicScheduler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         	logger.info(">>>>>>>>>>> runJob fail, jobKey:{}", jobKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 |