以前介紹過了quartz的一些相關理論知識,感受上挺簡單的,實際動手操做也確實如此,去quartz的官網上把Jar包下載下來之後,會看到它的目錄裏有例子程序,看完第一個例子以爲還能夠,可是看後面兩個例子程序有點讓人小小的無語,可能quartz以爲程序寫的越多,給出的使用方法也會越多,可是看上去很亂,並且大部分代碼是重複的,因此我把他們簡單化成一個例子,把它們記錄下來。java
本文一共有兩個例子,這兩個例子共用一個Job的實現,叫MyJob類,代碼以下express
package com.jll.quartz; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyJob implements Job { private static Logger logger = LoggerFactory.getLogger(MyJob.class); @Override public void execute(JobExecutionContext context) throws JobExecutionException { logger.info(context.getJobDetail().getKey() + " start to work at" + new Date()); } }
下面的代碼是第一個例子,設置重複的次數和重複時間的ide
package com.jll.quartz; import java.util.Date; import org.quartz.DateBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.SimpleScheduleBuilder; import org.quartz.SimpleTrigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SimpleExample { public void run() throws SchedulerException{ Logger log = LoggerFactory.getLogger(SimpleExample.class); log.info("------- Initializing ----------------------"); SchedulerFactory factory = new StdSchedulerFactory(); Scheduler sched = factory.getScheduler(); log.info("------- Initialization Complete -----------"); log.info("------- Scheduling Job -------------------"); Date startTime = DateBuilder.evenMinuteDate(new Date()); JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build(); SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startAt(startTime).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).withRepeatCount(10)).build(); Date ft = sched.scheduleJob(job, trigger); log.info(job.getKey() + " will run at: " + ft + " and repeat: " + trigger.getRepeatCount() + " times, every " + trigger.getRepeatInterval() / 1000L + " seconds"); sched.start(); try { Thread.sleep(30000L); } catch (Exception e) { } } public static void main(String[] args) throws Exception { SimpleExample example = new SimpleExample(); example.run(); } }
從代碼中能夠看出來任務重複10次,每1秒重複一次ui
第二個例子是使用CronExpression表達式的,spa
package com.jll.quartz; import java.util.Date; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.SchedulerMetaData; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CronExpressionExample { public void run() throws SchedulerException { Logger log = LoggerFactory.getLogger(CronExpressionExample.class); SchedulerFactory factory = new StdSchedulerFactory(); Scheduler sched = factory.getScheduler(); JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("job1", "group1").build(); CronTrigger trigger = TriggerBuilder .newTrigger() .withIdentity("trigger1", "group1") .withSchedule( CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) .build(); Date date = sched.scheduleJob(job, trigger); log.info(job.getKey() + " has been scheduled to run at: " + date + " and repeat based on expression: " + trigger.getCronExpression()); sched.start(); log.info("------- Started Scheduler -----------------"); try { Thread.sleep(30000L); } catch (Exception e) { } log.info("------- Shutting Down ---------------------"); 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 { CronExpressionExample example = new CronExpressionExample(); example.run(); } }
從上面的代碼能夠看出來任務每兩秒鐘執行一次,主線程30秒後死亡。線程