任务和触发器是quartz的两大块核心。触发器分CronTrigger 和SimpleTrigger
CronTrigger 支持比 SimpleTrigger 更具体的调度,而且也不是很复杂。基于 cron 表达式,CronTrigger 支持类似日历的重复间隔,而不是单一的时间间隔 —— 这相对 SimpleTrigger 而言是一大改进。掌握CronTrigger,是非常必要,掌握Quartz cron 表达式是学习CronTrigger的关键所在!
CronTriggerExample类:
package CronTrigger; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerMetaData; import java.text.SimpleDateFormat; import java.util.Date; import static org.quartz.CronScheduleBuilder.cronSchedule; import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrigger; public class CronTriggerExample { public void run() throws Exception { Scheduler sched = SchedFacory.getScheduler();//得到调度器实例 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//日期格式 JobDetail job = newJob(SimpleJob.class) //创建任务实例 .withIdentity("job3", "group1") .build(); CronTrigger trigger = newTrigger() //CronTrigger触发器实例 .withIdentity("trigger3", "group1") .withSchedule(cronSchedule("0/10 0/1 8-17 * * ?")) //在8-17之间每1分钟执行一次,并且为10秒间隔 .build(); Date ft = sched.scheduleJob(job, trigger); System.out.println(job.getKey() + " has been scheduled to run at: " + sdf.format(ft) + " and repeat based on expression: " + trigger.getCronExpression()); sched.start(); Thread.sleep(300L * 1000L); //5分钟 sched.shutdown(true); SchedulerMetaData metaData = sched.getMetaData(); System.out.println("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");//总共执行了多少个任务 } public static void main(String[] args)