zoukankan      html  css  js  c++  java
  • 根据SimpleScheduleBuilder配置不同的SimpleTrigger触发器

    Job代码:

    [java] view plaincopy

    1. package cn.zto.job; 
    2. import java.text.SimpleDateFormat; 
    3. import java.util.Date; 
    4. import org.quartz.Job; 
    5. import org.quartz.JobDetail; 
    6. import org.quartz.JobExecutionContext; 
    7. import org.quartz.JobExecutionException; 
    8. import org.quartz.JobKey; 
    9. import org.slf4j.Logger; 
    10. import org.slf4j.LoggerFactory; 
    11. public class SimpleJob 
    12. implements Job 
    13. public void execute(JobExecutionContext context) 
    14. throws JobExecutionException 
    15.   { 
    16. //通过上下文获取
    17.     JobKey jobKey = context.getJobDetail().getKey(); 
    18.     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");   
    19.     System.out.println("SimpleJob类 :"+ jobKey + " 在 " + dateFormat.format(new Date())+" 时运行"); 
    20.   } 

    SimpleTriggerExample.java

    [java] view plaincopy

    1. package cn.zto.app; 
    2. import java.text.SimpleDateFormat; 
    3. import java.util.Date; 
    4. import org.quartz.DateBuilder; 
    5. import org.quartz.JobBuilder; 
    6. import org.quartz.JobDetail; 
    7. import org.quartz.JobKey; 
    8. import org.quartz.Scheduler; 
    9. import org.quartz.SchedulerFactory; 
    10. import org.quartz.SchedulerMetaData; 
    11. import org.quartz.SimpleScheduleBuilder; 
    12. import org.quartz.SimpleTrigger; 
    13. import org.quartz.TriggerBuilder; 
    14. import org.quartz.TriggerKey; 
    15. import org.quartz.impl.StdSchedulerFactory; 
    16. import cn.zto.job.SimpleJob; 
    17. public class SimpleTriggerExample 
    18. public void run() 
    19. throws Exception 
    20.   { 
    21.     System.out.println("------- 初始化 -------------------"); 
    22.     SchedulerFactory sf = new StdSchedulerFactory(); 
    23.     Scheduler sched = sf.getScheduler(); 
    24.     System.out.println("------- 初始化完成 --------"); 
    25.     System.out.println("------- 向Scheduler加入Job ----------------"); 
    26.     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");   
    27. //设置任务触发的时间,时间为下方15的倍数  会在任意时间段的  15S 30S 45S 60S 开始会触发一次
    28.     Date startTime = DateBuilder.nextGivenSecondDate(null, 15); 
    29.     JobDetail job = JobBuilder.newJob(SimpleJob.class).withIdentity("job1", "group1").build(); 
    30.     SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger() 
    31.             .withIdentity("trigger1", "group1") 
    32.             .startAt(startTime) 
    33.             .build(); 
    34.     Date ft = sched.scheduleJob(job, trigger); 
    35.     System.out.println(job.getKey() + " 将会在: " + dateFormat.format(ft) + "时运行,"
    36.             + "重复: " + trigger.getRepeatCount() + " 次, " //获取重复的次数
    37.             + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次"); 
    38.     job = JobBuilder.newJob(SimpleJob.class).withIdentity("job2", "group1").build(); 
    39.     trigger = (SimpleTrigger)TriggerBuilder.newTrigger() 
    40.             .withIdentity("trigger2", "group1") 
    41.             .startAt(startTime) 
    42. //设置一个用于触发的时间
    43.             .withSchedule(SimpleScheduleBuilder//SimpleScheduleBuilder是简单调用触发器,它只能指定触发的间隔时间和执行次数;
    44.                         .simpleSchedule()//创建一个SimpleScheduleBuilder
    45.                         .withIntervalInSeconds(10)//指定一个重复间隔,以毫秒为单位。
    46.                         .withRepeatCount(10))//指定反复的次数
    47.             .build(); 
    48.     ft = sched.scheduleJob(job, trigger); 
    49.     System.out.println(job.getKey() + " 将会在: " + dateFormat.format(ft) + "时运行,"
    50.             + "重复: " + trigger.getRepeatCount() + " 次, "
    51.             + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次"); 
    52.     trigger = (SimpleTrigger)TriggerBuilder.newTrigger() 
    53. //将触发器放入  group2 里面
    54.             .withIdentity("trigger2", "group2") 
    55.             .startAt(startTime) 
    56.             .withSchedule(SimpleScheduleBuilder 
    57.                         .simpleSchedule() 
    58.                         .withIntervalInSeconds(10) 
    59.                         .withRepeatCount(2)) 
    60.             .forJob(job) 
    61.             .build(); 
    62.     ft = sched.scheduleJob(trigger); 
    63.     System.out.println(job.getKey() + " 也会在: " + dateFormat.format(ft) + "时运行,"
    64.             + "重复: " + trigger.getRepeatCount() + " 次, "
    65.             + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次"); 
    66.     job = JobBuilder.newJob(SimpleJob.class).withIdentity("job3", "group1").build(); 
    67.     trigger = (SimpleTrigger)TriggerBuilder.newTrigger() 
    68.             .withIdentity("trigger3", "group1") 
    69.             .startAt(startTime) 
    70.             .withSchedule(SimpleScheduleBuilder 
    71.                         .simpleSchedule() 
    72.                         .withIntervalInSeconds(10) 
    73.                         .withRepeatCount(5)) 
    74.             .build(); 
    75.     ft = sched.scheduleJob(job, trigger); 
    76.     System.out.println(job.getKey() + " 将会在: " + dateFormat.format(ft) + "时运行,"
    77.             + "重复: " + trigger.getRepeatCount() + " 次, "
    78.             + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次"); 
    79.     job = JobBuilder.newJob(SimpleJob.class).withIdentity("job4", "group1").build(); 
    80.     System.out.println("当前时间为:"+dateFormat.format(new Date())); 
    81.     trigger = (SimpleTrigger)TriggerBuilder.newTrigger() 
    82.             .withIdentity("trigger4", "group1") 
    83. //设定时间为5分钟后运行
    84.             .startAt(DateBuilder.futureDate(5, DateBuilder.IntervalUnit.MINUTE)) 
    85.             .build(); 
    86.     ft = sched.scheduleJob(job, trigger); 
    87.     System.out.println(job.getKey() + " 将会在: " + dateFormat.format(ft) + "时运行,"
    88.             + "重复: " + trigger.getRepeatCount() + " 次, "
    89.             + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次"); 
    90.     job = JobBuilder.newJob(SimpleJob.class).withIdentity("job5", "group1").build(); 
    91.     trigger = (SimpleTrigger)TriggerBuilder.newTrigger() 
    92.             .withIdentity("trigger5", "group1") 
    93.             .startAt(startTime) 
    94.             .withSchedule(SimpleScheduleBuilder 
    95.                         .simpleSchedule() 
    96.                         .withIntervalInSeconds(40) 
    97. //触发器会一直重复执行下去
    98.                         .repeatForever()) 
    99.             .build(); 
    100.     ft = sched.scheduleJob(job, trigger); 
    101.     System.out.println(job.getKey() + " 将会在: " + dateFormat.format(ft) + "时运行,"
    102.             + "重复: " + trigger.getRepeatCount() + " 次, "
    103.             + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次"); 
    104.     System.out.println("------- 开始Scheduler ----------------"); 
    105.     sched.start(); 
    106.     System.out.println("------- Scheduler调用job结束 -----------------"); 
    107.     job = JobBuilder.newJob(SimpleJob.class).withIdentity("job6", "group1").build(); 
    108.     trigger = (SimpleTrigger)TriggerBuilder.newTrigger() 
    109.             .withIdentity("trigger6", "group1") 
    110.             .startAt(startTime) 
    111.             .withSchedule(SimpleScheduleBuilder 
    112.                         .simpleSchedule() 
    113.                         .withIntervalInMinutes(1) 
    114.                         .withRepeatCount(20)) 
    115.             .build(); 
    116.     ft = sched.scheduleJob(job, trigger); 
    117.     System.out.println(job.getKey() + " 将会在: " + dateFormat.format(ft) + "时运行,"
    118.             + "重复: " + trigger.getRepeatCount() + " 次, "
    119.             + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次"); 
    120.     job = JobBuilder.newJob(SimpleJob.class).withIdentity("job7", "group1") 
    121.             .storeDurably()//该job没有触发器,该方法将durability设置为true
    122.             .build(); 
    123. //添加一个没有出发器的job
    124.     sched.addJob(job, true); 
    125.     System.out.println("手动触发job7..."); 
    126. //jobKey用来唯一的标识一个JobDetail
    127. //执行Job
    128.     sched.triggerJob(JobKey.jobKey("job7", "group1")); 
    129.     System.out.println("------- 等待10S... --------------"); 
    130. try
    131.     { 
    132.       Thread.sleep(10000L); 
    133.     } 
    134. catch (Exception e) 
    135.     { 
    136.     } 
    137.     System.out.println("------- 改变触发器6 --------------------"); 
    138.     trigger = (SimpleTrigger)TriggerBuilder.newTrigger() 
    139.             .withIdentity("trigger10", "group1") 
    140.             .startAt(startTime) 
    141.             .withSchedule(SimpleScheduleBuilder 
    142.                     .simpleSchedule() 
    143.                     .withIntervalInMinutes(1) 
    144.                     .withRepeatCount(20)) 
    145.             .build(); 
    146. //根据触发器获取指定的Job然后更改此Job的触发器
    147. //新的触发器不需要旧的触发器的名称相同
    148.     ft = sched.rescheduleJob(new TriggerKey("trigger6","group1")//获取TriggerKey(用来标识唯一的Trigger)
    149.             , trigger); 
    150.     System.out.println("job6 重新在 " + dateFormat.format(ft)+ "时运行 ,"
    151.             + "重复: " + trigger.getRepeatCount() + " 次, "
    152.             + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次"); 
    153.     System.out.println("------- 等待5分钟... ------------"); 
    154. try
    155.     { 
    156.       Thread.sleep(300000L); 
    157.     } 
    158. catch (Exception e) 
    159.     { 
    160.     } 
    161.     System.out.println("------- 关闭Scheduler ---------------------"); 
    162.     sched.shutdown(true); 
    163.     System.out.println("------- 关闭完成 -----------------"); 
    164.     SchedulerMetaData metaData = sched.getMetaData(); 
    165.     System.out.println("Executed " + metaData.getNumberOfJobsExecuted() + " jobs."); 
    166.   } 
    167. public static void main(String[] args) 
    168. throws Exception 
    169.   { 
    170.     SimpleTriggerExample example = new SimpleTriggerExample(); 
    171.     example.run(); 
    172.   } 

    运行结果:

    [plain] view plaincopy

    1. ------- 初始化 ------------------- 
    2. SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
    3. SLF4J: Defaulting to no-operation (NOP) logger implementation 
    4. SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
    5. ------- 初始化完成 -------- 
    6. ------- 向Scheduler加入Job ---------------- 
    7. group1.job1 将会在: 2014年07月31日 13时51分45秒时运行,重复: 0 次, 每 0 s 重复一次 
    8. group1.job2 将会在: 2014年07月31日 13时51分45秒时运行,重复: 10 次, 每 10 s 重复一次 
    9. group1.job2 也会在: 2014年07月31日 13时51分45秒时运行,重复: 2 次, 每 10 s 重复一次 
    10. group1.job3 将会在: 2014年07月31日 13时51分45秒时运行,重复: 5 次, 每 10 s 重复一次 
    11. 当前时间为:2014年07月31日 13时51分41秒 
    12. group1.job4 将会在: 2014年07月31日 13时56分41秒时运行,重复: 0 次, 每 0 s 重复一次 
    13. group1.job5 将会在: 2014年07月31日 13时51分45秒时运行,重复: -1 次, 每 40 s 重复一次 
    14. ------- 开始Scheduler ---------------- 
    15. ------- Scheduler调用job结束 ----------------- 
    16. group1.job6 将会在: 2014年07月31日 13时51分45秒时运行,重复: 20 次, 每 60 s 重复一次 
    17. 手动触发job7... 
    18. ------- 等待10S... -------------- 
    19. SimpleJob类 :group1.job7 在 2014年07月31日 13时51分41秒 时运行 
    20. SimpleJob类 :group1.job1 在 2014年07月31日 13时51分45秒 时运行 
    21. SimpleJob类 :group1.job2 在 2014年07月31日 13时51分45秒 时运行 
    22. SimpleJob类 :group1.job3 在 2014年07月31日 13时51分45秒 时运行 
    23. SimpleJob类 :group1.job5 在 2014年07月31日 13时51分45秒 时运行 
    24. SimpleJob类 :group1.job6 在 2014年07月31日 13时51分45秒 时运行 
    25. SimpleJob类 :group1.job2 在 2014年07月31日 13时51分45秒 时运行 
    26. ------- 改变触发器6 -------------------- 
    27. job6 重新在 2014年07月31日 13时51分45秒时运行 ,重复: 20 次, 每 60 s 重复一次 
    28. ------- 等待5分钟... ------------ 
    29. SimpleJob类 :group1.job6 在 2014年07月31日 13时51分51秒 时运行 
    30. SimpleJob类 :group1.job2 在 2014年07月31日 13时51分55秒 时运行 
    31. SimpleJob类 :group1.job3 在 2014年07月31日 13时51分55秒 时运行 
    32. SimpleJob类 :group1.job2 在 2014年07月31日 13时51分55秒 时运行 
    33. SimpleJob类 :group1.job2 在 2014年07月31日 13时52分05秒 时运行 
    34. SimpleJob类 :group1.job3 在 2014年07月31日 13时52分05秒 时运行 
    35. SimpleJob类 :group1.job2 在 2014年07月31日 13时52分05秒 时运行 
    36. SimpleJob类 :group1.job2 在 2014年07月31日 13时52分15秒 时运行 
    37. SimpleJob类 :group1.job3 在 2014年07月31日 13时52分15秒 时运行 
    38. SimpleJob类 :group1.job2 在 2014年07月31日 13时52分25秒 时运行 
    39. SimpleJob类 :group1.job3 在 2014年07月31日 13时52分25秒 时运行 
    40. SimpleJob类 :group1.job5 在 2014年07月31日 13时52分25秒 时运行 
    41. SimpleJob类 :group1.job2 在 2014年07月31日 13时52分35秒 时运行 
    42. SimpleJob类 :group1.job3 在 2014年07月31日 13时52分35秒 时运行 
    43. SimpleJob类 :group1.job6 在 2014年07月31日 13时52分45秒 时运行 
    44. SimpleJob类 :group1.job2 在 2014年07月31日 13时52分45秒 时运行 
    45. SimpleJob类 :group1.job2 在 2014年07月31日 13时52分55秒 时运行 
    46. SimpleJob类 :group1.job2 在 2014年07月31日 13时53分05秒 时运行 
    47. SimpleJob类 :group1.job5 在 2014年07月31日 13时53分05秒 时运行 
    48. SimpleJob类 :group1.job2 在 2014年07月31日 13时53分15秒 时运行 
    49. SimpleJob类 :group1.job2 在 2014年07月31日 13时53分25秒 时运行 
    50. SimpleJob类 :group1.job6 在 2014年07月31日 13时53分45秒 时运行 
    51. SimpleJob类 :group1.job5 在 2014年07月31日 13时53分45秒 时运行 
    52. SimpleJob类 :group1.job5 在 2014年07月31日 13时54分25秒 时运行 
    53. SimpleJob类 :group1.job6 在 2014年07月31日 13时54分45秒 时运行 
    54. SimpleJob类 :group1.job5 在 2014年07月31日 13时55分05秒 时运行 
    55. SimpleJob类 :group1.job6 在 2014年07月31日 13时55分45秒 时运行 
    56. SimpleJob类 :group1.job5 在 2014年07月31日 13时55分45秒 时运行 
    57. SimpleJob类 :group1.job5 在 2014年07月31日 13时56分25秒 时运行 
    58. SimpleJob类 :group1.job4 在 2014年07月31日 13时56分41秒 时运行 
    59. SimpleJob类 :group1.job6 在 2014年07月31日 13时56分45秒 时运行 
    60. ------- 关闭Scheduler --------------------- 
    61. ------- 关闭完成 ----------------- 
  • 相关阅读:
    oracle minus 与sqlserver except
    Ext.form.FieldSetI(转)
    C#系统服务定时执行(转)
    extjs4.0的数据代理proxy及数据模型的使用(转)
    JS属性defer的好处及IE8 提示 KB927917, IE6 IE7 提示操作已中止的解决办法
    水晶报表打印及多个报表打印到一个PDF文件里的办法
    C#不添加引用,动态调用webservice(转)
    向 ReportViewer 报表中添加页眉和页脚,控制页眉显示变量的值
    网站主要使用jquery总结(转)
    JSBuilder2使用方法(转)
  • 原文地址:https://www.cnblogs.com/wych/p/4104054.html
Copyright © 2011-2022 走看看