|  | @@ -10,6 +10,7 @@ import org.slf4j.LoggerFactory;
 | 
	
		
			
				|  |  |  import java.sql.Connection;
 | 
	
		
			
				|  |  |  import java.sql.PreparedStatement;
 | 
	
		
			
				|  |  |  import java.sql.SQLException;
 | 
	
		
			
				|  |  | +import java.text.ParseException;
 | 
	
		
			
				|  |  |  import java.util.*;
 | 
	
		
			
				|  |  |  import java.util.concurrent.ConcurrentHashMap;
 | 
	
		
			
				|  |  |  import java.util.concurrent.TimeUnit;
 | 
	
	
		
			
				|  | @@ -82,15 +83,7 @@ public class JobScheduleHelper {
 | 
	
		
			
				|  |  |                                      // 2.1、trigger-expire > 5s:pass && make next-trigger-time
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                                      // fresh next
 | 
	
		
			
				|  |  | -                                    Date nextValidTime = new CronExpression(jobInfo.getJobCron()).getNextValidTimeAfter(new Date());
 | 
	
		
			
				|  |  | -                                    if (nextValidTime != null) {
 | 
	
		
			
				|  |  | -                                        jobInfo.setTriggerLastTime(jobInfo.getTriggerNextTime());
 | 
	
		
			
				|  |  | -                                        jobInfo.setTriggerNextTime(nextValidTime.getTime());
 | 
	
		
			
				|  |  | -                                    } else {
 | 
	
		
			
				|  |  | -                                        jobInfo.setTriggerStatus(0);
 | 
	
		
			
				|  |  | -                                        jobInfo.setTriggerLastTime(0);
 | 
	
		
			
				|  |  | -                                        jobInfo.setTriggerNextTime(0);
 | 
	
		
			
				|  |  | -                                    }
 | 
	
		
			
				|  |  | +                                    refreshNextValidTime(jobInfo, new Date());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                                  } else if (nowTime > jobInfo.getTriggerNextTime()) {
 | 
	
		
			
				|  |  |                                      // 2.2、trigger-expire < 5s:direct-trigger && make next-trigger-time
 | 
	
	
		
			
				|  | @@ -117,15 +110,7 @@ public class JobScheduleHelper {
 | 
	
		
			
				|  |  |                                          pushTimeRing(ringSecond, jobInfo.getId());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                                          // 3、fresh next
 | 
	
		
			
				|  |  | -                                        Date nextValidTime = new CronExpression(jobInfo.getJobCron()).getNextValidTimeAfter(new Date(jobInfo.getTriggerNextTime()));
 | 
	
		
			
				|  |  | -                                        if (nextValidTime != null) {
 | 
	
		
			
				|  |  | -                                            jobInfo.setTriggerLastTime(jobInfo.getTriggerNextTime());
 | 
	
		
			
				|  |  | -                                            jobInfo.setTriggerNextTime(nextValidTime.getTime());
 | 
	
		
			
				|  |  | -                                        } else {
 | 
	
		
			
				|  |  | -                                            jobInfo.setTriggerStatus(0);
 | 
	
		
			
				|  |  | -                                            jobInfo.setTriggerLastTime(0);
 | 
	
		
			
				|  |  | -                                            jobInfo.setTriggerNextTime(0);
 | 
	
		
			
				|  |  | -                                        }
 | 
	
		
			
				|  |  | +                                        refreshNextValidTime(jobInfo, new Date(jobInfo.getTriggerNextTime()));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                                      }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -139,15 +124,7 @@ public class JobScheduleHelper {
 | 
	
		
			
				|  |  |                                      pushTimeRing(ringSecond, jobInfo.getId());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                                      // 3、fresh next
 | 
	
		
			
				|  |  | -                                    Date nextValidTime = new CronExpression(jobInfo.getJobCron()).getNextValidTimeAfter(new Date(jobInfo.getTriggerNextTime()));
 | 
	
		
			
				|  |  | -                                    if (nextValidTime != null) {
 | 
	
		
			
				|  |  | -                                        jobInfo.setTriggerLastTime(jobInfo.getTriggerNextTime());
 | 
	
		
			
				|  |  | -                                        jobInfo.setTriggerNextTime(nextValidTime.getTime());
 | 
	
		
			
				|  |  | -                                    } else {
 | 
	
		
			
				|  |  | -                                        jobInfo.setTriggerStatus(0);
 | 
	
		
			
				|  |  | -                                        jobInfo.setTriggerLastTime(0);
 | 
	
		
			
				|  |  | -                                        jobInfo.setTriggerNextTime(0);
 | 
	
		
			
				|  |  | -                                    }
 | 
	
		
			
				|  |  | +                                    refreshNextValidTime(jobInfo, new Date(jobInfo.getTriggerNextTime()));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                                  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -293,6 +270,18 @@ public class JobScheduleHelper {
 | 
	
		
			
				|  |  |          ringThread.start();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    private void refreshNextValidTime(XxlJobInfo jobInfo, Date date) throws ParseException {
 | 
	
		
			
				|  |  | +        Date nextValidTime = new CronExpression(jobInfo.getJobCron()).getNextValidTimeAfter(date);
 | 
	
		
			
				|  |  | +        if (nextValidTime != null) {
 | 
	
		
			
				|  |  | +            jobInfo.setTriggerLastTime(jobInfo.getTriggerNextTime());
 | 
	
		
			
				|  |  | +            jobInfo.setTriggerNextTime(nextValidTime.getTime());
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            jobInfo.setTriggerStatus(0);
 | 
	
		
			
				|  |  | +            jobInfo.setTriggerLastTime(0);
 | 
	
		
			
				|  |  | +            jobInfo.setTriggerNextTime(0);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      private void pushTimeRing(int ringSecond, int jobId){
 | 
	
		
			
				|  |  |          // push async ring
 | 
	
		
			
				|  |  |          List<Integer> ringItemData = ringData.get(ringSecond);
 |