Quartz2.1.5学习(二)

 到下班时间了,赶快把这篇博文写完。今天终于把项目中用到Quartz部分的功能写完了。好了,废话不多说了,继续上次的学习记录。我们来看第二个例子,这个例子中主要讲到的是使用SimpleTrigger这个对象,这个对象可以在未来某一个时刻定时执行一项任务,可以执行多个任务,可以重复这些任务和次数与间隔(时间、次数)。


项目界面:

首先,我们当然需要看下我们执行任务的类,直接上代码:

SimpleJob.java

  
  
  
  
  1. package main.java.org.quartz.examples.example2; 
  2.  
  3. import java.text.SimpleDateFormat; 
  4. import java.util.Date; 
  5.  
  6. import org.slf4j.Logger; 
  7. import org.slf4j.LoggerFactory; 
  8. import org.quartz.Job; 
  9. import org.quartz.JobExecutionContext; 
  10. import org.quartz.JobExecutionException; 
  11. import org.quartz.JobKey; 
  12.  
  13.  
  14. public class SimpleJob implements Job { 
  15.  
  16.     private static Logger _log = LoggerFactory.getLogger(SimpleJob.class); 
  17.  
  18.     public SimpleJob() {} 
  19.  
  20.  
  21.     public void execute(JobExecutionContext context) 
  22.         throws JobExecutionException { 
  23.  
  24.         JobKey jobKey = context.getJobDetail().getKey(); 
  25.         SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
  26.         //这里的jobkey,API里是这样说的: 
  27.         //它标识一个唯一的jobDetail 
  28.         //key是由组名称和job名称组成,job名称必须是惟一的。 
  29.         //如果只有一个组名称,那么它的组名称默认就被指定为这个组名称。 
  30.         //意思就是job的组名称和job名称 
  31.         _log.info("jobKey: " + jobKey + "执行时间:" + sdf.format(new Date())); 
  32.     } 
  33.  

下面是我们的任务调度程序(记得上节讲的那几个步骤,创建调度就不成问题)

 

SimpleTriggerExample.java

 

  
  
  
  
  1. package main.java.org.quartz.examples.example2; 
  2.  
  3. import static org.quartz.JobBuilder.newJob; 
  4. import static org.quartz.TriggerBuilder.newTrigger; 
  5.  
  6. import java.util.Date; 
  7.  
  8. import org.quartz.DateBuilder; 
  9. import org.quartz.JobDetail; 
  10. import org.quartz.Scheduler; 
  11. import org.quartz.SchedulerFactory; 
  12. import org.quartz.SchedulerMetaData; 
  13. import org.quartz.SimpleTrigger; 
  14. import org.quartz.impl.StdSchedulerFactory; 
  15. import org.slf4j.Logger; 
  16. import org.slf4j.LoggerFactory; 
  17.  
  18. public class SimpleTriggerExample { 
  19.  
  20.      
  21.     public void run() throws Exception { 
  22.         Logger log = LoggerFactory.getLogger(SimpleTriggerExample.class); 
  23.  
  24.         log.info("------- Initializing -------------------"); 
  25.         SchedulerFactory sf = new StdSchedulerFactory(); 
  26.         Scheduler sched = sf.getScheduler(); 
  27.         log.info("------- Initialization Complete --------"); 
  28.  
  29.         log.info("------- Scheduling Jobs ----------------"); 
  30.         //当前时间加15秒 
  31.         Date startTime = DateBuilder.nextGivenSecondDate(null15); 
  32.         JobDetail job = newJob(SimpleJob.class
  33.             .withIdentity("job1""group1"
  34.             .build(); 
  35.          
  36.         SimpleTrigger trigger = (SimpleTrigger) newTrigger()  
  37.             .withIdentity("trigger1""group1"
  38.             .startAt(startTime) 
  39.             .build(); 
  40.  
  41.         Date ft = sched.scheduleJob(job, trigger); 
  42.         sched.addJob(job, true); 
  43.         log.info(job.getKey() + 
  44.                 " will run at: " + ft +   
  45.                 " and repeat: " + trigger.getRepeatCount() +  
  46.                 " times, every " + trigger.getRepeatInterval() / 1000 + " seconds"); 
  47.          
  48.         log.info("------- 开始 Scheduling Jobs... --------------"); 
  49.         log.info("------- 等待 30 秒... --------------"); 
  50.         sched.start(); 
  51.         try { 
  52.             Thread.sleep(30 * 1000);  
  53.         } catch (Exception e) { 
  54.         } 
  55.         
  56.         log.info("------- 关闭 ---------------------"); 
  57.         sched.shutdown(true); 
  58.         log.info("------- 关闭完成 -----------------"); 
  59.         SchedulerMetaData metaData = sched.getMetaData(); 
  60.         log.info("执行了 " + metaData.getNumberOfJobsExecuted() + " 个工作。"); 
  61.     } 
  62.  
  63.     public static void main(String[] args) throws Exception { 
  64.  
  65.         SimpleTriggerExample example = new SimpleTriggerExample(); 
  66.         example.run(); 
  67.  
  68.     } 
  69.  

这里我只执行了一次任务调度,如果想要执行多个任务只需要newJob、newTrigger,之后sched.addJob(job, true);将其加进任务调度队列里面就可以了。

 

  
  
  
  
  1. SimpleTrigger trigger = newTrigger() 
  2.             .withIdentity("trigger7""group1"
  3.             .startAt(startTime) 
  4.             .withSchedule(simpleSchedule() 
  5.                     .withIntervalInMinutes(5
  6.                     .withRepeatCount(20)) 
  7.             .build(); 

这里可以设置它的循环次数和间隔时间。(这里指的意思是每隔5分钟执行一次任务,共执行20次)

withIntervalInminutes()这个方法是在org.quartz.SimpleScheduleBuilder包下的,里面包含了很多方法(它们都返回 SimpleScheduleBuilder

withIntervalInHours(int intervalInHours) 指定一个重复间隔以小时为单位。

withIntervalInMilliseconds(long intervalInMillis) 指定一个重复间隔以毫秒为单位。

withIntervalInMinutes(int intervalInMinutes) 指定一个重复间隔以分钟为单位。

withIntervalInSeconds(int intervalInSeconds) 指定一个重复间隔以秒为单位。

……

withRepeatCount(int number):这个一看就明白,是执行多少次的意思。

startAt(Date startTime):定时开始执行的时间

endAt(Date triggerEndTime):定时结束执行的时间

具体可以到DOC文件夹下看API。。。。这里不多说了。。。

 

好吧,来看下执行后控制台打印的信息:

 

  
  
  
  
  1. [INFO] 12 六月 07:15:30.812 下午 main [main.java.org.quartz.examples.example2.SimpleTriggerExample] 
  2. ------- Initializing ------------------- 
  3.  
  4. [INFO] 12 六月 07:15:30.859 下午 main [org.quartz.impl.StdSchedulerFactory] 
  5. Using default implementation for ThreadExecutor 
  6.  
  7. [INFO] 12 六月 07:15:30.859 下午 main [org.quartz.simpl.SimpleThreadPool] 
  8. Job execution threads will use class loader of thread: main 
  9.  
  10. [INFO] 12 六月 07:15:30.890 下午 main [org.quartz.core.SchedulerSignalerImpl] 
  11. Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl 
  12.  
  13. [INFO] 12 六月 07:15:30.890 下午 main [org.quartz.core.QuartzScheduler] 
  14. Quartz Scheduler v.2.1.5 created. 
  15.  
  16. [INFO] 12 六月 07:15:30.890 下午 main [org.quartz.simpl.RAMJobStore] 
  17. RAMJobStore initialized. 
  18.  
  19. [INFO] 12 六月 07:15:30.890 下午 main [org.quartz.core.QuartzScheduler] 
  20. Scheduler meta-data: Quartz Scheduler (v2.1.5) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED' 
  21.   Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. 
  22.   NOT STARTED. 
  23.   Currently in standby mode. 
  24.   Number of jobs executed: 0 
  25.   Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. 
  26.   Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. 
  27.  
  28.  
  29. [INFO] 12 六月 07:15:30.890 下午 main [org.quartz.impl.StdSchedulerFactory] 
  30. Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' 
  31.  
  32. [INFO] 12 六月 07:15:30.890 下午 main [org.quartz.impl.StdSchedulerFactory] 
  33. Quartz scheduler version: 2.1.5 
  34.  
  35. [INFO] 12 六月 07:15:30.890 下午 main [main.java.org.quartz.examples.example2.SimpleTriggerExample] 
  36. ------- Initialization Complete -------- 
  37.  
  38. [INFO] 12 六月 07:15:30.890 下午 main [main.java.org.quartz.examples.example2.SimpleTriggerExample] 
  39. ------- Scheduling Jobs ---------------- 
  40.  
  41. [INFO] 12 六月 07:15:30.921 下午 main [main.java.org.quartz.examples.example2.SimpleTriggerExample] 
  42. group1.job1 will run at: Tue Jun 12 19:15:45 CST 2012 and repeat: 0 times, every 0 seconds 
  43.  
  44. [INFO] 12 六月 07:15:30.921 下午 main [main.java.org.quartz.examples.example2.SimpleTriggerExample] 
  45. ------- 开始 Scheduling Jobs... -------------- 
  46.  
  47. [INFO] 12 六月 07:15:30.921 下午 main [main.java.org.quartz.examples.example2.SimpleTriggerExample] 
  48. ------- 等待 30 秒... -------------- 
  49.  
  50. [INFO] 12 六月 07:15:30.921 下午 main [org.quartz.core.QuartzScheduler] 
  51. Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. 
  52.  
  53. [INFO] 12 六月 07:15:45.000 下午 DefaultQuartzScheduler_Worker-1 [main.java.org.quartz.examples.example2.SimpleJob] 
  54. jobKey: group1.job1执行时间:2012-06-12 19:15:45 
  55.  
  56. [INFO] 12 六月 07:16:00.921 下午 main [main.java.org.quartz.examples.example2.SimpleTriggerExample] 
  57. ------- 关闭 --------------------- 
  58.  
  59. [INFO] 12 六月 07:16:00.921 下午 main [org.quartz.core.QuartzScheduler] 
  60. Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down. 
  61.  
  62. [INFO] 12 六月 07:16:00.921 下午 main [org.quartz.core.QuartzScheduler] 
  63. Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused. 
  64.  
  65. [INFO] 12 六月 07:16:01.406 下午 main [org.quartz.core.QuartzScheduler] 
  66. Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete. 
  67.  
  68. [INFO] 12 六月 07:16:01.406 下午 main [main.java.org.quartz.examples.example2.SimpleTriggerExample] 
  69. ------- 关闭完成 ----------------- 
  70.  
  71. [INFO] 12 六月 07:16:01.406 下午 main [main.java.org.quartz.examples.example2.SimpleTriggerExample] 
  72. 执行了 1 个工作。 

饿死了,赶快回家吃饭。下节继续。

 

=======================================================================

以上属于个人观点,难免有错误,如发现错误请留言告之,我会订正的。

=======================================================================

 

你可能感兴趣的:(quartz,学习)