Quartz快速入门
Quartz快速入门
2.解压缩将基本包quartz-2.2.1.jar放到工程中,如果你工程中连log4j都没有的话,那就把日志相关的几个jar包一起放到工程中。
3.配置
创建quartz.properties文件
org.quartz.scheduler.instanceName = MyScheduler---------scheduler的名字,随便起一个名字(还是起个有点意义的名字吧)
org.quartz.threadPool.threadCount= 3 --------线程池中最大线程数是3(最多三个job同时执行)
org.quartz.scheduler.skipUpdateCheck = true
---跳过Quartz的自动更新检查4.一下是代码了,为了方便将官方的代码靠过来稍作修改,代码里有标明。
1 import org.quartz.Scheduler; 2 import org.quartz.SchedulerException; 3 import org.quartz.impl.StdSchedulerFactory; 4 5 publicclassQuartzTest{ 6 7 publicstaticvoid main(String[] args){ 8 9 try{ 10 // Grab the Scheduler instance from the Factory 11 //初始化scheduler,官方文档使用的后面的内容,所有配置都是默认值,为了使用我们辛苦配置的配置文件,我们用前面的方法。 12 Scheduler scheduler = new StdSchedulerFactory("quartz.properties").getScheduler();//StdSchedulerFactory.getDefaultScheduler(); 13 14 // and start it off 15 scheduler.start(); 16 //---------------插入执行的代码-------------------------- 17 scheduler.shutdown(); 18 19 }catch(SchedulerException se){ 20 se.printStackTrace(); 21 } 22 } 23 }
以上代码就可以执行了,不过什么都没干,只是启动了和关闭了一下。- - !
5. do something
要do sth需要Job,Trigger这些都是Quartz里的基本元素。看名字也能明白Job是干活的蓝领。Trigger是触发Job执行的,定时任务最关键的时间就是靠定义Trigger是定义的。
创建Job
新建一个类实现Job接口并写execute方法实现。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 import java.util.Date; 2 3 import org.apache.log4j.Logger; 4 import org.quartz.Job; 5 import org.quartz.JobExecutionContext; 6 import org.quartz.JobExecutionException; 7 8 public class JobTest implements Job{ 9 10 private static Logger logger = Logger.getLogger(JobTest.class); 11 12 public void execute(JobExecutionContext arg0) throws JobExecutionException { 13 logger.info("Hello world-----myQuartz-------class:JobTest method:execute" + new Date()); 14 15 } 16 17 } 18 然后,在第4步-----插入执行的代码-------的位置插入以下代码 19 try { 20 //定义一个任务,并绑定JobTest(自己创建的任务类) 21 JobBuilder jobBuilder = JobBuilder.newJob(JobTest.class); 22 jobBuilder.withIdentity("Job1", "Group1"); 23 24 JobDetail job = jobBuilder.build(); 25 //定义一个触发任务执行的触发器 26 TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger(); 27 triggerBuilder.withIdentity("Trigger1", "TriggerGroup1"); 28 //定义执行时间 29 Date runTime = DateBuilder.evenSecondDate(new Date()); 30 31 triggerBuilder.startAt(runTime); 32 triggerBuilder.withSchedule(SimpleScheduleBuilder.simpleSchedule(). 33 withIntervalInMilliseconds(10000).repeatForever()); 34 35 Trigger trigger = triggerBuilder.build(); 36 37 scheduler.scheduleJob(job, trigger); 38 logger.info(job.getKey() + " will run at...: " + runTime); 39 scheduler.start(); 40 logger.info("------- Started Scheduler -----------------"); 41 42 logger.info("------- Waiting 65 seconds... -------------"); 43 try { 44 Thread.sleep(65000); 45 } catch (InterruptedException e) { 46 e.printStackTrace(); 47 } 48 logger.info("------- Shutting Down ---------------------"); 49 scheduler.shutdown(); 50 logger.info("------- Shutdown Complete -----------------"); 51 } catch (SchedulerException e) { 52 e.printStackTrace(); 53 }
汗!可算写完了,这么长。最好弄个Util工具类
一下是我写的工具类,主要实现job和trigger的创建,大家借鉴:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 import java.util.Date; 2 3 import org.quartz.Job; 4 import org.quartz.JobBuilder; 5 import org.quartz.JobDetail; 6 import org.quartz.Scheduler; 7 import org.quartz.SchedulerException; 8 import org.quartz.SimpleScheduleBuilder; 9 import org.quartz.Trigger; 10 import org.quartz.TriggerBuilder; 11 import org.quartz.impl.StdSchedulerFactory; 12 13 /** 14 * 定时任务工具类 15 * @author llhua 16 * 17 */ 18 public class TaskUtil { 19 /** 20 * 初始化一个全部默认配置的scheduler 21 * @return 22 * @throws SchedulerException 23 */ 24 public static Scheduler getDefaultScheduler() throws SchedulerException{ 25 return StdSchedulerFactory.getDefaultScheduler(); 26 } 27 28 /** 29 * 初始化一个通过配置文件配置的配置的scheduler 30 * @return 31 * @throws SchedulerException 32 */ 33 public static Scheduler getScheduler(String confFile) throws SchedulerException{ 34 return new StdSchedulerFactory(confFile).getScheduler(); 35 } 36 37 /** 38 * 定义一个job 39 * @param jobClazz 40 * @param name 41 * @param group 42 * @return 43 */ 44 public static JobDetail getJob(Class<? extends Job> jobClazz, String name, String group){ 45 return JobBuilder.newJob(jobClazz).withIdentity(name, group).build(); 46 } 47 48 /** 49 * 定义一个立即开始的触发器(.startNow()) 50 * @param schedBuilder 51 * @param name 52 * @param group 53 * @return 54 * 55 * SimpleScheduleBuilder一般用法 56 * SimpleScheduleBuilder.simpleSchedule(). 57 withIntervalInMilliseconds(10000).repeatForever() 58 */ 59 public static Trigger getSimpleTrigger(SimpleScheduleBuilder schedBuilder, String name, String group){ 60 return TriggerBuilder.newTrigger().withIdentity(name, group).startNow().withSchedule(schedBuilder).build(); 61 } 62 /** 63 * 定义一个在指定时间开始的触发器(.startAt()) 64 * @param schedBuilder 65 * @param name 66 * @param group 67 * @return 68 */ 69 public static Trigger getSimpleTrigger(Date runTime, SimpleScheduleBuilder schedBuilder, String name, String group){ 70 return TriggerBuilder.newTrigger().withIdentity(name, group).startAt(runTime).withSchedule(schedBuilder).build(); 71 } 72 73 public static Trigger getCronTrigger(){ 74 return null; 75 } 76 77 public static Trigger getNthIncludedDayTrigger(){ 78 return null; 79 } 80 81 }
说明:最下面有三个get Trigger的方法代表了Quartz中已经有的三种Trigger,简单的已经可以实现基本的应用了,如有复杂应用可以实现下面两种。在下目前还没用到。