Job任务类java
package org.quartz.examples.example8; import java.util.Date; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobKey; /** * 这只是一个简单的工做,它会被例1屡次触发 */ public class SimpleJob implements Job { private static Logger LOG = LoggerFactory.getLogger(SimpleJob.class); //必需要有public修饰的无参构造函数 public SimpleJob() { } //定时器执行方法 public void execute(JobExecutionContext context) throws JobExecutionException { // 这个做业只是打印出它的做业名称以及它运行的日期和时间 JobKey jobKey = context.getJobDetail().getKey(); LOG.info("SimpleJob says: " + jobKey + " executing at " + new Date()); } }
调度器类函数
package org.quartz.examples.example8; import static org.quartz.DateBuilder.dateOf; import static org.quartz.JobBuilder.newJob; import static org.quartz.SimpleScheduleBuilder.simpleSchedule; import static org.quartz.TriggerBuilder.newTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.SchedulerMetaData; import org.quartz.SimpleTrigger; import org.quartz.examples.example2.SimpleJob; import org.quartz.impl.StdSchedulerFactory; import org.quartz.impl.calendar.AnnualCalendar; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * 这个示例将演示如何使用日历排除不该该进行调度的时间段,好比假期。 */ public class CalendarExample { final Logger LOG = LoggerFactory.getLogger(CalendarExample.class); public void run() throws Exception { // 初始化一个调度工厂,并实例化一个调度类 SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); // 将假期日历添加到日程中 AnnualCalendar holidays = new AnnualCalendar(); // 2005年6月4日 Calendar fourthOfJuly = new GregorianCalendar(2005, 6, 4); holidays.setDayExcluded(fourthOfJuly, true); // 2005年9月31日 Calendar halloween = new GregorianCalendar(2005, 9, 31); holidays.setDayExcluded(halloween, true); // 2005年11月25日 Calendar christmas = new GregorianCalendar(2005, 11, 25); holidays.setDayExcluded(christmas, true); // 告诉调度器咱们的假期安排 sched.addCalendar("holidays", holidays, false, false); // 安排一项工做每小时运行一次:10月31日10点0分0秒 ,秒、分、小时、日、月 Date runDate = dateOf(0, 0, 10, 31, 10); JobDetail job = newJob(SimpleJob.class).withIdentity("job1", "group1").build(); // 间隔1小时运行一次,无限循环 SimpleTrigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runDate) .withSchedule(simpleSchedule().withIntervalInHours(1).repeatForever()).modifiedByCalendar("holidays") .build(); Date firstRunTime = sched.scheduleJob(job, trigger); // 因为10月31日是万圣节,因此咱们将在以后一天11月1日运行任务 LOG.info(job.getKey() + " will run at: " + firstRunTime + " and repeat: " + trigger.getRepeatCount() + " times, every " + trigger.getRepeatInterval() / 1000 + " seconds"); sched.start(); // 睡眠30秒 Thread.sleep(30L * 1000L); sched.shutdown(true); LOG.info("------- Shutdown Complete -----------------"); SchedulerMetaData metaData = sched.getMetaData(); LOG.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs."); } public static void main(String[] args) throws Exception { CalendarExample example = new CalendarExample(); example.run(); } }