Browse Source

Merge pull request #1211 from qinnnyul/refactor-extract-common-method

extract method to avoid duplicated codes
许雪里 5 years ago
parent
commit
2247be23b1

+ 16 - 27
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java

@@ -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);