package com.vip.saturn.job.trigger; import java.text.ParseException; import org.quartz.CronExpression; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.triggers.AbstractTrigger; import com.vip.saturn.job.basic.AbstractElasticJob; import com.vip.saturn.job.exception.JobException; public class CrondTrigger implements SaturnTrigger{ /** * 验证cron表达式的合法性 */ private static void validateCron(String cron) { if (cron != null && !cron.trim().isEmpty()) { try { CronExpression.validateExpression(cron.trim()); } catch (ParseException e) { throw new JobException(e); } } } public Trigger createTrigger(AbstractElasticJob job){ String cron = job.getConfigService().getCron(); validateCron(cron); CronScheduleBuilder cronScheduleBuilder; if (cron != null && !cron.trim().isEmpty()) { cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cron.trim()); } else { cronScheduleBuilder = CronScheduleBuilder.cronSchedule("* * * * * ? 2099"); } cronScheduleBuilder = cronScheduleBuilder .inTimeZone(job.getConfigService().getTimeZone()) .withMisfireHandlingInstructionDoNothing(); Trigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(job.getExecutorName() + "_" + job.getJobName()) .withSchedule(cronScheduleBuilder).build(); ((AbstractTrigger<CronTrigger>) cronTrigger) .setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING); return cronTrigger; } @Override @SuppressWarnings("unchecked") public SaturnScheduler build(AbstractElasticJob job) throws SchedulerException{ SaturnScheduler scheduler = new SaturnScheduler(job, createTrigger(job)); scheduler.start(); return scheduler; } @Override public void retrigger(SaturnScheduler scheduler, AbstractElasticJob job) throws SchedulerException { scheduler.rescheduleJob(createTrigger(job)); } }