quartz的简单使用-基于2.X(一)【基本使用】

我自己测试过的代码

<span style="white-space:pre">	</span>    SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
            Scheduler sched = schedFact.getScheduler();

            // scheduler.getContext().put("java.sql.Connection",connection);
            // //如果需要像Connection这种不能序列化的参数,可以通过这个传递
            // 在job中Connection con =
            // (Connection)jobExecutionContext.getScheduler().getContext().get("java.sql.Connection");
            // 能序列化的东西使用JobDetail.getJobDataMap().put("orderId", orderId);就可以 了

            sched.start();

            // define the job and tie it to our HelloJob class
            JobDetail job = JobBuilder.newJob(SimpleJob.class).withIdentity("myJob", "group1").build();
            job.getJobDataMap().put("orderId", orderId);

            Date start = new Date();
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(start);
            calendar.add(Calendar.DAY_OF_MONTH, 7);
            // calendar.add(Calendar.SECOND, 5);
            start = calendar.getTime();

            // Trigger the job to run now, and then every 40 seconds
            Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startNow()
                    .withSchedule(SimpleScheduleBuilder.simpleSchedule()).startAt(start).build();

            // Tell quartz to schedule the job using our trigger
            sched.scheduleJob(job, trigger);
public class SimpleJob implements Job{

    private static Logger logger = LoggerFactory.getLogger(SimpleJob.class);

    /**
     * @param paramJobExecutionContext
     * @throws JobExecutionException
     * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
     */
    @Override
    public void execute(JobExecutionContext paramJobExecutionContext) throws JobExecutionException{
        String orderId = paramJobExecutionContext.getJobDetail().getJobDataMap().getString("orderId");
        Order order = OrderService.service.findByOrderId(orderId);
        order.set(Order.ORDER_STATUS, Constant.OrderStatus.FINISHED);
        OrderService.service.updateOrderStatus(order);
        logger.info("orderId= " + orderId + " is updated to finished");
    }

}



1、开始时间 startAt 

Java代码   收藏代码
  1. SchedulerFactory sf = new StdSchedulerFactory();  
  2. Scheduler sched = sf.getScheduler();  
  3. Date runTime = DateBuilder.evenSecondDate(new Date());  
  4. JobDetail job = JobBuilder.newJob(Job1.class).withIdentity("job1""group1").build();  
  5. Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1","group1")  
  6.         .startAt(runTime)  
  7.         .build();         
  8. sched.scheduleJob(job, trigger);  
  9. sched.start();  


2、简单触发器 withSchedule  
SimpleScheduleBuilder.simpleSchedule() 可以设置间隔、重复次数 
Java代码   收藏代码
  1. SchedulerFactory sf = new StdSchedulerFactory();  
  2. Scheduler sched = sf.getScheduler();  
  3. JobDetail job = JobBuilder.newJob(Job2.class).withIdentity("job2""group2").build();  
  4. Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger2","group2")  
  5.         .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever())  
  6.         .build();  
  7. sched.scheduleJob(job, trigger);  
  8. sched.start();  


3、Cron触发器 
CronScheduleBuilder.cronSchedule("0/5 * * * * ?") 使用Unix cron表达式 
Java代码   收藏代码
  1. SchedulerFactory sf = new StdSchedulerFactory();  
  2. Scheduler sched = sf.getScheduler();  
  3. JobDetail job = JobBuilder.newJob(Job3.class).withIdentity("job3""group3").build();  
  4. Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger3","group3")  
  5.         .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))  
  6.         .build();  
  7. sched.scheduleJob(job, trigger);  
  8. sched.start();  


4、结束时间 endAt  
Java代码   收藏代码
  1. SchedulerFactory sf = new StdSchedulerFactory();  
  2. Scheduler sched = sf.getScheduler();  
  3. Date runTime = DateBuilder.evenSecondDate(new Date());  
  4. Date endTime = DateBuilder.evenMinuteDate(new Date());  
  5. JobDetail job = JobBuilder.newJob(Job4.class).withIdentity("job4""group4").build();  
  6. Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger4","group4")  
  7.         .startAt(runTime)  
  8.         .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever())  
  9.         .endAt(endTime)  
  10.         .build();  
  11. sched.scheduleJob(job, trigger);  
  12. sched.start();  


5、作业监听器 addJobListener  
Java代码   收藏代码
  1. JobKey jobKey = new JobKey("dummyJobName""group5");  
  2. JobDetail job = JobBuilder.newJob(Job5.class).withIdentity(jobKey).build();  
  3.   
  4. Trigger trigger = TriggerBuilder.newTrigger().withIdentity(  
  5.         "dummyTriggerName""group5").withSchedule(  
  6.         CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();  
  7.   
  8. Scheduler scheduler = new StdSchedulerFactory().getScheduler();  
  9.   
  10. // Listener attached to jobKey  
  11. scheduler.getListenerManager().addJobListener(new Job5Listener(),  
  12.         KeyMatcher.keyEquals(jobKey));  
  13.   
  14. // Listener attached to group named "group 1" only.  
  15. // scheduler.getListenerManager().addJobListener(  
  16. // new HelloJobListener(), GroupMatcher.jobGroupEquals("group1")  
  17. // );  
  18.   
  19. scheduler.start();  
  20. scheduler.scheduleJob(job, trigger);  


6、启动多个作业 scheduleJob  
Java代码   收藏代码
  1. JobKey jobKeyA = new JobKey("job6A""group6");  
  2. JobDetail jobA = JobBuilder.newJob(Job6A.class).withIdentity(jobKeyA).build();  
  3.   
  4. JobKey jobKeyB = new JobKey("job6B""group6");  
  5. JobDetail jobB = JobBuilder.newJob(Job6B.class).withIdentity(jobKeyB).build();  
  6.   
  7. JobKey jobKeyC = new JobKey("job6C""group6");  
  8. JobDetail jobC = JobBuilder.newJob(Job6C.class).withIdentity(jobKeyC).build();  
  9.   
  10. Trigger trigger1 = TriggerBuilder.newTrigger().withIdentity(  
  11.         "dummyTriggerName1""group6").withSchedule(  
  12.         CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();  
  13.   
  14. Trigger trigger2 = TriggerBuilder.newTrigger().withIdentity(  
  15.         "dummyTriggerName2""group6").withSchedule(  
  16.         CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();  
  17.   
  18. Trigger trigger3 = TriggerBuilder.newTrigger().withIdentity(  
  19.         "dummyTriggerName3""group6").withSchedule(  
  20.         CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();  
  21.   
  22. Scheduler scheduler = new StdSchedulerFactory().getScheduler();  
  23.   
  24. scheduler.start();  
  25. scheduler.scheduleJob(jobA, trigger1);  
  26. scheduler.scheduleJob(jobB, trigger2);  
  27. scheduler.scheduleJob(jobC, trigger3);  


7、列举所有作业 getJobKeys  
Java代码   收藏代码
  1. Scheduler scheduler = new StdSchedulerFactory().getScheduler();  
  2. for (String groupName : scheduler.getJobGroupNames()) {  
  3.     for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName))) {  
  4.         String jobName = jobKey.getName();  
  5.         String jobGroup = jobKey.getGroup();  
  6.         List<Trigger> triggers = (List<Trigger>) scheduler.getTriggersOfJob(jobKey);  
  7.         Date nextFireTime = triggers.get(0).getNextFireTime();  
  8.         System.out.println("[jobName] : " + jobName + " [groupName] : " + jobGroup + " - " + nextFireTime);  
  9.     }  
  10. }  


8、手动触发作业 triggerJob  
Java代码   收藏代码
  1. SchedulerFactory sf = new StdSchedulerFactory();  
  2. Scheduler sched = sf.getScheduler();  
  3. Date runTime = DateBuilder.evenSecondDate(new Date());  
  4. JobDetail job = JobBuilder.newJob(Job8.class).withIdentity("job8""group8").build();  
  5. Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger8","group8")  
  6.         .startAt(runTime)  
  7.         .build();         
  8. sched.scheduleJob(job, trigger);  
  9. sched.start();  
  10.   
  11. sched.triggerJob(new JobKey("job8""group8"));  
  12. sched.triggerJob(new JobKey("job8""group8"));  


9、传递参数 usingJobData  
Java代码   收藏代码
  1. SchedulerFactory sf = new StdSchedulerFactory();  
  2. Scheduler sched = sf.getScheduler();  
  3. Date runTime = DateBuilder.evenSecondDate(new Date());  
  4. JobDetail job = JobBuilder.newJob(Job9.class).withIdentity("job9""group9")  
  5.         .usingJobData("jobSays""Hello Quartz!")  
  6.         .build();  
  7. Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger9","group9")  
  8.         .startAt(runTime)  
  9.         .build();  
  10. sched.scheduleJob(job, trigger);  
  11. sched.start();  


10、取消/删除作业  
Java代码   收藏代码
  1. // removes the given trigger  
  2. sched.unscheduleJob(new TriggerKey("job10""group10"));      
  3. // removes all triggers to the given job  
  4. sched.deleteJob(new JobKey("job10""group10"));  


11、作业出错时自动再执行  

一直执行到成功: 
Java代码   收藏代码
  1. JobExecutionException e2 = new JobExecutionException(e);  
  2. // fire it again  
  3. e2.setRefireImmediately(true);  
  4. throw e2;  


执行n次后停止: 
Java代码   收藏代码
  1. // allow 5 retries  
  2. if (count >= 5) {  
  3.     JobExecutionException e = new JobExecutionException(  
  4.             "Retries exceeded");  
  5.     //make sure it doesn't run again  
  6.     e.setUnscheduleAllTriggers(true);  
  7.     throw e;  
  8. }  


JWatch - A Quartz Monitor  
http://code.google.com/p/jwatch/  
 
 

Cron 表达式生成器 CronMaker  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值