|
|
|
|
@ -1,8 +1,8 @@
|
|
|
|
|
package com.xxl.job.admin.scheduler.thread;
|
|
|
|
|
|
|
|
|
|
import com.xxl.job.admin.model.XxlJobInfo;
|
|
|
|
|
import com.xxl.job.admin.scheduler.config.XxlJobAdminBootstrap;
|
|
|
|
|
import com.xxl.job.admin.scheduler.cron.CronExpression;
|
|
|
|
|
import com.xxl.job.admin.model.XxlJobInfo;
|
|
|
|
|
import com.xxl.job.admin.scheduler.enums.MisfireStrategyEnum;
|
|
|
|
|
import com.xxl.job.admin.scheduler.enums.ScheduleTypeEnum;
|
|
|
|
|
import com.xxl.job.admin.scheduler.trigger.TriggerTypeEnum;
|
|
|
|
|
@ -19,12 +19,8 @@ import java.util.concurrent.TimeUnit;
|
|
|
|
|
* @author xuxueli 2019-05-21
|
|
|
|
|
*/
|
|
|
|
|
public class JobScheduleHelper {
|
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(JobScheduleHelper.class);
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(JobScheduleHelper.class);
|
|
|
|
|
|
|
|
|
|
private static JobScheduleHelper instance = new JobScheduleHelper();
|
|
|
|
|
public static JobScheduleHelper getInstance(){
|
|
|
|
|
return instance;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static final long PRE_READ_MS = 5000; // pre read
|
|
|
|
|
|
|
|
|
|
@ -34,6 +30,9 @@ public class JobScheduleHelper {
|
|
|
|
|
private volatile boolean ringThreadToStop = false;
|
|
|
|
|
private volatile static Map<Integer, List<Integer>> ringData = new ConcurrentHashMap<>();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* start
|
|
|
|
|
*/
|
|
|
|
|
public void start(){
|
|
|
|
|
|
|
|
|
|
// schedule thread
|
|
|
|
|
@ -90,7 +89,7 @@ public class JobScheduleHelper {
|
|
|
|
|
MisfireStrategyEnum misfireStrategyEnum = MisfireStrategyEnum.match(jobInfo.getMisfireStrategy(), MisfireStrategyEnum.DO_NOTHING);
|
|
|
|
|
if (MisfireStrategyEnum.FIRE_ONCE_NOW == misfireStrategyEnum) {
|
|
|
|
|
// FIRE_ONCE_NOW 》 trigger
|
|
|
|
|
JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.MISFIRE, -1, null, null, null);
|
|
|
|
|
XxlJobAdminBootstrap.getInstance().getJobTriggerPoolHelper().trigger(jobInfo.getId(), TriggerTypeEnum.MISFIRE, -1, null, null, null);
|
|
|
|
|
logger.debug(">>>>>>>>>>> xxl-job, schedule push trigger : jobId = " + jobInfo.getId() );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -101,7 +100,7 @@ public class JobScheduleHelper {
|
|
|
|
|
// 2.2、trigger-expire < 5s:direct-trigger && make next-trigger-time
|
|
|
|
|
|
|
|
|
|
// 1、trigger
|
|
|
|
|
JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.CRON, -1, null, null, null);
|
|
|
|
|
XxlJobAdminBootstrap.getInstance().getJobTriggerPoolHelper().trigger(jobInfo.getId(), TriggerTypeEnum.CRON, -1, null, null, null);
|
|
|
|
|
logger.debug(">>>>>>>>>>> xxl-job, schedule push trigger : jobId = " + jobInfo.getId() );
|
|
|
|
|
|
|
|
|
|
// 2、fresh next
|
|
|
|
|
@ -249,7 +248,7 @@ public class JobScheduleHelper {
|
|
|
|
|
// do trigger
|
|
|
|
|
for (int jobId: ringItemData) {
|
|
|
|
|
// do trigger
|
|
|
|
|
JobTriggerPoolHelper.trigger(jobId, TriggerTypeEnum.CRON, -1, null, null, null);
|
|
|
|
|
XxlJobAdminBootstrap.getInstance().getJobTriggerPoolHelper().trigger(jobId, TriggerTypeEnum.CRON, -1, null, null, null);
|
|
|
|
|
}
|
|
|
|
|
// clear
|
|
|
|
|
ringItemData.clear();
|
|
|
|
|
@ -306,7 +305,10 @@ public class JobScheduleHelper {
|
|
|
|
|
logger.debug(">>>>>>>>>>> xxl-job, schedule push time-ring : " + ringSecond + " = " + Arrays.asList(ringItemData) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void toStop(){
|
|
|
|
|
/**
|
|
|
|
|
* stop
|
|
|
|
|
*/
|
|
|
|
|
public void stop(){
|
|
|
|
|
|
|
|
|
|
// 1、stop schedule
|
|
|
|
|
scheduleThreadToStop = true;
|
|
|
|
|
@ -366,6 +368,10 @@ public class JobScheduleHelper {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ---------------------- tools ----------------------
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* generate next valid time
|
|
|
|
|
*/
|
|
|
|
|
public static Date generateNextValidTime(XxlJobInfo jobInfo, Date fromTime) throws Exception {
|
|
|
|
|
ScheduleTypeEnum scheduleTypeEnum = ScheduleTypeEnum.match(jobInfo.getScheduleType(), null);
|
|
|
|
|
if (ScheduleTypeEnum.CRON == scheduleTypeEnum) {
|
|
|
|
|
|