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(); } }