Quartz2.1.5学习(四)


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

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

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

 这篇讲解怎么设置参数传递给执行的任务,我们需要用到jobDataMap()这个方法。

 JobDataMap能够支持任何序列化的对象,当job执行时,这些对象能够在job实例中可用。JobDataMap实现了Java Map接口,它有一些附加的方法,这些方法用来储存和跟踪简单类型的数据。如下代码可以很快地给job增加JobDataMap:

 
  
  1. jobDetail.getJobDataMap().put("jobSays""Hello World!"); 
  2. jobDetail.getJobDataMap().put("myFloatValue"3.141f); 
  3. jobDetail.getJobDataMap().put("myStateData"new ArrayList()); 

在job执行时,我们可以在job里通过如下代码得到JobDataMap:

 
  
  1. public class DumbJob implements Job { 
  2.     public DumbJob() { 
  3.     } 
  4.     public void execute(JobExecutionContext context) 
  5.       throws JobExecutionException 
  6.     { 
  7.       String instName = context.getJobDetail().getName(); 
  8.       String instGroup = context.getJobDetail().getGroup(); 
  9.       JobDataMap dataMap = context.getJobDetail().getJobDataMap(); 
  10.       String jobSays = dataMap.getString("jobSays"); 
  11.       float myFloatValue = dataMap.getFloat("myFloatValue"); 
  12.       ArrayList state = (ArrayList)dataMap.get("myStateData"); 
  13.       state.add(new Date()); 
  14.       System.err.println("Instance " + instName + " of DumbJob says: " + jobSays); 
  15.     } 
  16.   } 

看官方的例子里,我们在run()方法里可以看到:

 
  
  1. JobDetail job = newJob(ColorJob.class
  2.             .withIdentity("job1""group1"
  3.             .build(); 
  4. job.getJobDataMap().put(key, value); 

只要put(key,value)即可传递参数。

我们在实现了job接口的类中

 
  
  1. JobDataMap data = context.getJobDetail().getJobDataMap(); 
  2.        String favoriteColor = data.getString(key); 
  3.        int count = data.getInt(key); 

看官方提供的例子example4:

JobStateExample.java

 
  
  1. package main.java.org.quartz.examples.example4; 
  2.  
  3. import static org.quartz.JobBuilder.newJob; 
  4. import static org.quartz.SimpleScheduleBuilder.simpleSchedule; 
  5. import static org.quartz.TriggerBuilder.newTrigger; 
  6. import static org.quartz.DateBuilder.*; 
  7.  
  8. import java.util.Date; 
  9.  
  10. import org.quartz.JobDetail; 
  11. import org.quartz.Scheduler; 
  12. import org.quartz.SchedulerFactory; 
  13. import org.quartz.SchedulerMetaData; 
  14. import org.quartz.SimpleTrigger; 
  15. import org.quartz.impl.StdSchedulerFactory; 
  16. import org.slf4j.Logger; 
  17. import org.slf4j.LoggerFactory; 
  18.  
  19.  
  20. public class JobStateExample { 
  21.  
  22.     public void run() throws Exception { 
  23.         Logger log = LoggerFactory.getLogger(JobStateExample.class); 
  24.  
  25.         log.info("------- Initializing -------------------"); 
  26.  
  27.         SchedulerFactory sf = new StdSchedulerFactory(); 
  28.         Scheduler sched = sf.getScheduler(); 
  29.  
  30.         log.info("------- Initialization Complete --------"); 
  31.  
  32.         log.info("------- Scheduling Jobs ----------------"); 
  33.  
  34.         Date startTime = nextGivenSecondDate(null10); 
  35.  
  36.         JobDetail job1 = newJob(ColorJob.class
  37.             .withIdentity("job1""group1"
  38.             .build(); 
  39.      
  40.         SimpleTrigger trigger1 = newTrigger()  
  41.             .withIdentity("trigger1""group1"
  42.             .startAt(startTime) 
  43.             .withSchedule(simpleSchedule() 
  44.                     .withIntervalInSeconds(10
  45.                     .withRepeatCount(4)) 
  46.             .build(); 
  47.         //设置参数,调用ColorJob中的默认变量 
  48.         job1.getJobDataMap().put(ColorJob.FAVORITE_COLOR, "Green"); 
  49.         job1.getJobDataMap().put(ColorJob.EXECUTION_COUNT, 1); 
  50.          
  51.         Date scheduleTime1 = sched.scheduleJob(job1, trigger1); 
  52.         log.info(job1.getKey() + 
  53.                 " will run at: " + scheduleTime1 +   
  54.                 " and repeat: " + trigger1.getRepeatCount() +  
  55.                 " times, every " + trigger1.getRepeatInterval() / 1000 + " seconds"); 
  56.  
  57.         log.info("------- Starting Scheduler ----------------"); 
  58.  
  59.         sched.start(); 
  60.  
  61.         log.info("------- Started Scheduler -----------------"); 
  62.          
  63.         log.info("------- Waiting 60 seconds... -------------"); 
  64.         try { 
  65.             Thread.sleep(60L * 1000L);  
  66.         } catch (Exception e) { 
  67.         } 
  68.  
  69.         log.info("------- Shutting Down ---------------------"); 
  70.  
  71.         sched.shutdown(true); 
  72.  
  73.         log.info("------- Shutdown Complete -----------------"); 
  74.  
  75.         SchedulerMetaData metaData = sched.getMetaData(); 
  76.         log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs."); 
  77.  
  78.     } 
  79.  
  80.     public static void main(String[] args) throws Exception { 
  81.  
  82.         JobStateExample example = new JobStateExample(); 
  83.         example.run(); 
  84.     } 
  85.  

ColorJob.java

 
  
  1. package main.java.org.quartz.examples.example4; 
  2.  
  3. import java.util.Date; 
  4.  
  5. import org.quartz.DisallowConcurrentExecution; 
  6. import org.quartz.Job; 
  7. import org.quartz.JobDataMap; 
  8. import org.quartz.JobExecutionContext; 
  9. import org.quartz.JobExecutionException; 
  10. import org.quartz.JobKey; 
  11. import org.quartz.PersistJobDataAfterExecution; 
  12. import org.slf4j.Logger; 
  13. import org.slf4j.LoggerFactory; 
  14.  
  15.  
  16. @PersistJobDataAfterExecution 
  17. @DisallowConcurrentExecution 
  18. public class ColorJob implements Job { 
  19.  
  20.     private static Logger _log = LoggerFactory.getLogger(ColorJob.class); 
  21.      
  22.     public static final String FAVORITE_COLOR = "favorite color"
  23.     public static final String EXECUTION_COUNT = "count"
  24.      
  25.     private int _counter = 1
  26.  
  27.     public ColorJob() {} 
  28.  
  29.     public void execute(JobExecutionContext context) 
  30.         throws JobExecutionException { 
  31.  
  32.         JobKey jobKey = context.getJobDetail().getKey(); 
  33.          
  34.         JobDataMap data = context.getJobDetail().getJobDataMap(); 
  35.         String favoriteColor = data.getString(FAVORITE_COLOR); 
  36.         int count = data.getInt(EXECUTION_COUNT); 
  37.          
  38.         _log.info("ColorJob: " + jobKey + " executing at " + new Date() + "\n" + 
  39.             "  favorite color is " + favoriteColor + "\n" +  
  40.             "  execution count (from job map) is " + count + "\n" +  
  41.             "  execution count (from job member variable) is " + _counter); 
  42.  
  43.         count++; 
  44.         data.put(EXECUTION_COUNT, count); 
  45.          
  46.         _counter++; 
  47.     } 
  48.  

控制台输出信息:

 
  
  1. [INFO] 14 六月 10:34:40.640 上午 main [main.java.org.quartz.examples.example4.JobStateExample] 
  2. ------- Initializing ------------------- 
  3.  
  4. [INFO] 14 六月 10:34:40.687 上午 main [org.quartz.impl.StdSchedulerFactory] 
  5. Using default implementation for ThreadExecutor 
  6.  
  7. [INFO] 14 六月 10:34:40.687 上午 main [org.quartz.simpl.SimpleThreadPool] 
  8. Job execution threads will use class loader of thread: main 
  9.  
  10. [INFO] 14 六月 10:34:40.718 上午 main [org.quartz.core.SchedulerSignalerImpl] 
  11. Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl 
  12.  
  13. [INFO] 14 六月 10:34:40.718 上午 main [org.quartz.core.QuartzScheduler] 
  14. Quartz Scheduler v.2.1.5 created. 
  15.  
  16. [INFO] 14 六月 10:34:40.718 上午 main [org.quartz.simpl.RAMJobStore] 
  17. RAMJobStore initialized. 
  18.  
  19. [INFO] 14 六月 10:34:40.718 上午 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] 14 六月 10:34:40.718 上午 main [org.quartz.impl.StdSchedulerFactory] 
  30. Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' 
  31.  
  32. [INFO] 14 六月 10:34:40.718 上午 main [org.quartz.impl.StdSchedulerFactory] 
  33. Quartz scheduler version: 2.1.5 
  34.  
  35. [INFO] 14 六月 10:34:40.718 上午 main [main.java.org.quartz.examples.example4.JobStateExample] 
  36. ------- Initialization Complete -------- 
  37.  
  38. [INFO] 14 六月 10:34:40.718 上午 main [main.java.org.quartz.examples.example4.JobStateExample] 
  39. ------- Scheduling Jobs ---------------- 
  40.  
  41. [INFO] 14 六月 10:34:40.734 上午 main [main.java.org.quartz.examples.example4.JobStateExample] 
  42. group1.job1 will run at: Thu Jun 14 10:34:50 CST 2012 and repeat: 4 times, every 10 seconds 
  43.  
  44. [INFO] 14 六月 10:34:40.734 上午 main [main.java.org.quartz.examples.example4.JobStateExample] 
  45. ------- Starting Scheduler ---------------- 
  46.  
  47. [INFO] 14 六月 10:34:40.734 上午 main [org.quartz.core.QuartzScheduler] 
  48. Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. 
  49.  
  50. [INFO] 14 六月 10:34:40.734 上午 main [main.java.org.quartz.examples.example4.JobStateExample] 
  51. ------- Started Scheduler ----------------- 
  52.  
  53. [INFO] 14 六月 10:34:40.734 上午 main [main.java.org.quartz.examples.example4.JobStateExample] 
  54. ------- Waiting 60 seconds... ------------- 
  55.  
  56. [INFO] 14 六月 10:34:50.000 上午 DefaultQuartzScheduler_Worker-1 [main.java.org.quartz.examples.example4.ColorJob] 
  57. ColorJob: group1.job1 executing at Thu Jun 14 10:34:50 CST 2012 
  58.   favorite color is Green 
  59.   execution count (from job map) is 1 
  60.   execution count (from job member variable) is 1 
  61.  
  62. [INFO] 14 六月 10:35:00.000 上午 DefaultQuartzScheduler_Worker-2 [main.java.org.quartz.examples.example4.ColorJob] 
  63. ColorJob: group1.job1 executing at Thu Jun 14 10:35:00 CST 2012 
  64.   favorite color is Green 
  65.   execution count (from job map) is 2 
  66.   execution count (from job member variable) is 1 
  67.  
  68. [INFO] 14 六月 10:35:10.015 上午 DefaultQuartzScheduler_Worker-3 [main.java.org.quartz.examples.example4.ColorJob] 
  69. ColorJob: group1.job1 executing at Thu Jun 14 10:35:10 CST 2012 
  70.   favorite color is Green 
  71.   execution count (from job map) is 3 
  72.   execution count (from job member variable) is 1 
  73.  
  74. [INFO] 14 六月 10:35:20.000 上午 DefaultQuartzScheduler_Worker-4 [main.java.org.quartz.examples.example4.ColorJob] 
  75. ColorJob: group1.job1 executing at Thu Jun 14 10:35:20 CST 2012 
  76.   favorite color is Green 
  77.   execution count (from job map) is 4 
  78.   execution count (from job member variable) is 1 
  79.  
  80. [INFO] 14 六月 10:35:30.015 上午 DefaultQuartzScheduler_Worker-5 [main.java.org.quartz.examples.example4.ColorJob] 
  81. ColorJob: group1.job1 executing at Thu Jun 14 10:35:30 CST 2012 
  82.   favorite color is Green 
  83.   execution count (from job map) is 5 
  84.   execution count (from job member variable) is 1 
  85.  
  86. [INFO] 14 六月 10:35:40.734 上午 main [main.java.org.quartz.examples.example4.JobStateExample] 
  87. ------- Shutting Down --------------------- 
  88.  
  89. [INFO] 14 六月 10:35:40.734 上午 main [org.quartz.core.QuartzScheduler] 
  90. Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down. 
  91.  
  92. [INFO] 14 六月 10:35:40.734 上午 main [org.quartz.core.QuartzScheduler] 
  93. Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused. 
  94.  
  95. [INFO] 14 六月 10:35:41.062 上午 main [org.quartz.core.QuartzScheduler] 
  96. Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete. 
  97.  
  98. [INFO] 14 六月 10:35:41.062 上午 main [main.java.org.quartz.examples.example4.JobStateExample] 
  99. ------- Shutdown Complete ----------------- 
  100.  
  101. [INFO] 14 六月 10:35:41.062 上午 main [main.java.org.quartz.examples.example4.JobStateExample] 
  102. Executed 5 jobs. 

 本文转自shyy8712872 51CTO博客,原文链接:http://blog.51cto.com/shuyangyang/898198,如需转载请自行联系原作者


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值