|
|
@ -36,6 +36,7 @@ public class QuartzJobUtil { |
|
|
|
.setJobData(quartzModel.getJobDataMap()).build(); |
|
|
|
// 表达式调度构建器
|
|
|
|
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzModel.getCron()); |
|
|
|
scheduleBuilder = handleCronScheduleMisfirePolicy(quartzModel, scheduleBuilder); |
|
|
|
// 按新的cronExpression表达式构建一个新的trigger
|
|
|
|
TriggerBuilder<Trigger> builder = TriggerBuilder.newTrigger() |
|
|
|
.withIdentity(quartzModel.getTriggerName(), quartzModel.getTriggerGroupName()); |
|
|
@ -45,6 +46,8 @@ public class QuartzJobUtil { |
|
|
|
if (quartzModel.getEndTime() != null) { |
|
|
|
builder.endAt(quartzModel.getEndTime()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Trigger trigger = builder.withSchedule(scheduleBuilder).build(); |
|
|
|
scheduler.scheduleJob(job, trigger); |
|
|
|
// 启动
|
|
|
@ -53,7 +56,7 @@ public class QuartzJobUtil { |
|
|
|
} |
|
|
|
} |
|
|
|
catch (Exception e) { |
|
|
|
log.error("Add quartz job error, jobName = {}", quartzModel.getJobName()); |
|
|
|
log.error("Add quartz job error, jobName = {}", quartzModel.getJobName(), e); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
@ -62,6 +65,29 @@ public class QuartzJobUtil { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static CronScheduleBuilder handleCronScheduleMisfirePolicy(QuartzJobModule job, CronScheduleBuilder cb) |
|
|
|
throws Exception { |
|
|
|
switch (job.getMisfirePolicy()) { |
|
|
|
|
|
|
|
case "withMisfireHandlingInstructionIgnoreMisfires": |
|
|
|
//以错过的第一个频率时间立刻开始执行
|
|
|
|
//重做错过的所有频率周期后
|
|
|
|
//当下一次触发频率发生时间大于当前时间后,再按照正常的Cron频率依次执行
|
|
|
|
return cb.withMisfireHandlingInstructionIgnoreMisfires(); |
|
|
|
case "withMisfireHandlingInstructionFireAndProceed": |
|
|
|
//以错过的第一个频率时间立刻开始执行
|
|
|
|
//——重做错过的所有频率周期后
|
|
|
|
//——当下一次触发频率发生时间大于当前时间后,再按照正常的Cron频率依次执行
|
|
|
|
return cb.withMisfireHandlingInstructionFireAndProceed(); |
|
|
|
case "withMisfireHandlingInstructionDoNothing": |
|
|
|
// 不触发立即执行
|
|
|
|
// 等待下次Cron触发频率到达时刻开始按照Cron频率依次执行
|
|
|
|
return cb.withMisfireHandlingInstructionDoNothing(); |
|
|
|
default: |
|
|
|
throw new Exception("The task misfire policy '" + job.getMisfirePolicy() + "' cannot be used in cron schedule tasks"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @Description: 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名) |
|
|
|
* @param jobName |
|
|
@ -182,7 +208,7 @@ public class QuartzJobUtil { |
|
|
|
TriggerKey triggerKey = TriggerKey.triggerKey(jobName, Constant.Quartz.QZ_TRIGGER_GROUP_NAME); |
|
|
|
JobKey jobKey = JobKey.jobKey(jobName, Constant.Quartz.QZ_JOB_GROUP_NAME); |
|
|
|
try { |
|
|
|
Trigger trigger = (Trigger) scheduler.getTrigger(triggerKey); |
|
|
|
Trigger trigger = scheduler.getTrigger(triggerKey); |
|
|
|
if (trigger == null) { |
|
|
|
return; |
|
|
|
} |
|
|
|