Quartz之SimpleTrigger

SimpleTrigger: 
它只能用于指定任务在一个特定时间内运行,可指定任务的重复(时间,次数)与间隔(时间,次数)
 
代码说明了一切,请参见注释! 
工程图片 
 
SimpleJob.java 
Java代码    收藏代码
  1. import java.text.SimpleDateFormat;  
  2. import java.util.Date;  
  3.   
  4. import org.slf4j.Logger;  
  5. import org.slf4j.LoggerFactory;  
  6. import org.quartz.Job;  
  7. import org.quartz.JobExecutionContext;  
  8. import org.quartz.JobExecutionException;  
  9. import org.quartz.JobKey;  
  10.   
  11. public class SimpleJob implements Job {  
  12.   
  13.     private static Logger _log = LoggerFactory.getLogger(SimpleJob.class);  
  14.   
  15.     public SimpleJob() {    }  
  16.       
  17.     public void execute(JobExecutionContext context)  
  18.         throws JobExecutionException {  
  19.         
  20.         JobKey jobKey = context.getJobDetail().getKey();          
  21.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");        
  22.         _log.error("Quarta JobKey : " + jobKey + " 执行时间:  " + sdf.format(new Date()));  
  23.           
  24.     }  
  25. }  


SimpleTriggerExample.java 
Java代码    收藏代码
  1. import static org.quartz.JobBuilder.newJob;  
  2. import static org.quartz.SimpleScheduleBuilder.simpleSchedule;  
  3. import static org.quartz.TriggerBuilder.newTrigger;  
  4.   
  5. import java.text.SimpleDateFormat;  
  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. /** 
  19.  * SimpleTrigger:它只能用于指定任务在一个特定时间内运行,可指定任务的重复(时间,次数)与间隔(时间,次数) 
  20.  * */  
  21. public class SimpleTriggerExample {  
  22.   
  23.     Logger log = LoggerFactory.getLogger(SimpleTriggerExample.class);  
  24.   
  25.     public void run() throws Exception {  
  26.   
  27.         // 通过SchedulerFactory获取一个调度器实例  
  28.         SchedulerFactory sf = new StdSchedulerFactory();  
  29.         Scheduler sched = sf.getScheduler();  
  30.   
  31.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
  32.   
  33.         // 在当前时间15秒后运行  
  34.         Date startTime = DateBuilder.nextGivenSecondDate(null,15);  
  35.   
  36.         // 通过过JobDetail封装SimpleJob,同时指定Job在Scheduler中所属组及名称,这里,组名为group1,而名称为job1。  
  37.         JobDetail job = newJob(SimpleJob.class).withIdentity("job1""group1").build();  
  38.   
  39.         // 创建一个SimpleTrigger实例,指定该Trigger在Scheduler中所属组及名称。  
  40.         // 接着设置调度的时间规则.当前时间15秒后运行,每10秒运行一次,共运行5次  
  41.         /*SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1") 
  42.                                 .startAt(startTime).withSchedule(simpleSchedule()                                            
  43.                                 .withIntervalInSeconds(10) 
  44.                                 .withRepeatCount(5) 
  45.                                 ) 
  46.                                 .build();*/  
  47.           
  48.         //从当前时间开始,每10秒钟执行一次,直到程序结束为止  
  49.         /*SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1") 
  50.                                 .startAt(startTime).withSchedule(simpleSchedule()                                            
  51.                                 .withIntervalInSeconds(10) 
  52.                                 .repeatForever() 
  53.                                 ) 
  54.                                 .build();*/  
  55.           
  56.         //从当前时间开始,每一分钟执行一次,在设置withIntervalInSeconds(10)无效  
  57.         /*SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1") 
  58.         .startAt(startTime).withSchedule(simpleSchedule()                                            
  59.         //.withIntervalInSeconds(10) 
  60.         .repeatMinutelyForever() 
  61.         ) 
  62.         .build();*/  
  63.   
  64.           
  65.         //从当前时间开始,repeatMinutelyForever(10),不带参数为每分钟执行一次,带了参数等于: 60*10  
  66.         /*SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1") 
  67.         .startAt(startTime).withSchedule(simpleSchedule()    
  68.         .repeatMinutelyForever(10) 
  69.         ) 
  70.         .build();*/  
  71.           
  72.           
  73.         //从当前时间开始,每秒钟执行一次,当然带了参数等于1*? ^_^  
  74.         /*SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1") 
  75.         .startAt(startTime).withSchedule(simpleSchedule()    
  76.         .repeatSecondlyForever() 
  77.         ) 
  78.         .build();*/  
  79.           
  80.         //repeatHourlyForever()方法是第1小时执行一次,带了参数等于1*?  
  81.           
  82.         //从当前时间开始,每1分钟执行一次,并且只执行4次  
  83.         /*SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1") 
  84.         .startAt(startTime).withSchedule(simpleSchedule()    
  85.         .repeatMinutelyForTotalCount(5) 
  86.         ) 
  87.         .build();*/  
  88.           
  89.         //repeatSecondlyForTotalCount(5),反过来说:只执行4次,每次执行的间隔为1秒钟  
  90.           
  91.         //当前时间的加上5分钟  
  92.         Date endTime = DateBuilder.nextGivenMinuteDate(null5);  
  93.         System.out.println("开始时间: "+ sdf.format(startTime)+",结束时间: "+sdf.format(endTime));  
  94.           
  95.         //这个比较常用吧  
  96.         //指定从: startTime为开始时间,endTime为结束时间,规则:每2秒钟执行一次,repeatForever()方法表示重复执行,一直到结束时间  
  97.         SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1""group1")  
  98.         .startAt(startTime)   
  99.         .endAt(endTime)       
  100.         .withSchedule(  
  101.                 simpleSchedule()  
  102.                 .withIntervalInSeconds(2)  
  103.                 .repeatForever()  
  104.         )                     
  105.         .build();         
  106.           
  107.         // 注册并进行调度  
  108.         Date ft = sched.scheduleJob(job, trigger);  
  109.           
  110.         //getRepeatInterval()指:执行任务间的间隔时间,getRepeatCount()表示总共执行多少次,-1表示未知  
  111.         log.error(job.getKey() + " will run at: " + sdf.format(ft)  
  112.                 + " and repeat: " + trigger.getRepeatCount() + " times, every "  
  113.                 + trigger.getRepeatInterval() / 1000 + " seconds");  
  114.   
  115.         // 调度启动  
  116.         sched.start();  
  117.   
  118.         try {  
  119.             //1分钟  
  120.             Thread.sleep(600L * 1000L);  
  121.               
  122.         } catch (Exception e) {  
  123.         }  
  124.   
  125.         //调度器停止  
  126.         sched.shutdown(true);  
  127.           
  128.         SchedulerMetaData metaData = sched.getMetaData();  
  129.         //总共运行了多少个任务  
  130.         log.error("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");  
  131.     }  
  132.   
  133.     public static void main(String[] args) throws Exception {  
  134.           
  135.         SimpleTriggerExample example = new SimpleTriggerExample();  
  136.         example.run();  
  137.     }  
  138. }  

工程请参见附件!

猜你喜欢

转载自zxb1985.iteye.com/blog/1841399