运用quartz实现的java定时器

时间:2021-11-07 02:59:19
     标签:quartzjavascheduler job 定时器             原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://xuepiaoqiyue.blog.51cto.com/4391594/857571

一、什么是定时器

        定时器的用途方方面面,早上叫我们起床的闹钟,洗衣机、微波炉、电视机、空调都有定时设置。

        而定时器一般可以分为两个部分:触发装置和触发事件。而触发装置中又有对时间的控制。

二、我们的软件定时器

        在java中,我们的软件定时器也是分为这两个部分。

       采用quartz实现触发器时,首先是通过一个Scheduler来对触发器及出发事件的控制。触发器中含有触发开始时间、触发结束时间、触发次数和触发周期的参数调用方法来对以上属性进行控制。而触发事件是通过继承Job接口的方式实现,最后在触发时自动调用触发事件。

三、java定时器实例解析

首先,我的工程调用了一下三个jar包

quartz-all-1.6.1.jar 定时器核心类
commons-collections.jar 共通类
commons-logging-1.0.4.jar 共通类

以下实例是启动后三秒开始执行第一次,每隔10秒

定时器测试类

  
  
  1. /**
  2. * @brief 定时器测试类
  3. *
  4. * @author Administrator
  5. * @date 2012-5-8
  6. */
  7. public class Test {
  8. public static void main(String[] args){
  9. InitScheduler.init();
  10. }
  11. }

时间管理类Scheduler

  
  
  1. /**
  2. * @brief 时间管理类
  3. *
  4. * @author Administrator
  5. * @date 2012-5-8
  6. */
  7. public class InitScheduler {
  8. private static Scheduler sched = null;;
  9. public static void init(){
  10. try {
  11. //初始化Scheduler
  12. sched = (new StdSchedulerFactory()).getScheduler();
  13. //定时执行MyJob中默认方法
  14. //第一个是任务的名称,第二个是组名,第三个就是实际当任务需要执行的回调类。
  15. JobDetail jobDetail = new JobDetail("myjob",
  16. "groupsimpletrigger", MyJob.class);
  17. //第一个是Trigger的名称,第二个是Trigger的组名,第三个是任务开始时间,第四个是结束时间,第五个是重复
  18. //次数(使用SimpleTrigger.REPEAT_INDEFINITELY常量表示无限次),最后一个是重复周期(单位是毫秒),
  19. //触发器,这里是开始3秒后执行,之后每十秒执行一次
  20. SimpleTrigger simpletrigger = new SimpleTrigger(
  21. "simpletrigger",
  22. "groupsimpletrigger",
  23. new Date(System.currentTimeMillis() + 3000),
  24. null,
  25. SimpleTrigger.REPEAT_INDEFINITELY,
  26. 10L * 1000L);
  27. //给我们的时间计划sched添加job及触发器,每个sched可添加多个job及触发器
  28. sched.scheduleJob(jobDetail, simpletrigger);
  29. //开始执行时间计划
  30. sched.start();
  31. } catch (SchedulerException e) {
  32. // TODO Auto-generated catch block
  33. e.printStackTrace();
  34. }
  35. }
  36. }


继承了Job接口的任务类

  
  
  1. /**
  2. * @brief 继承了Job接口的任务类
  3. *
  4. * @author Administrator
  5. * @date 2012-5-8
  6. */
  7. public class MyJob implements Job{
  8. /** @brief XXX */
  9. @Override
  10. public void execute(JobExecutionContext arg0) throws JobExecutionException {
  11. // TODO Auto-generated method stub
  12. //输出执行myjob的时间
  13. System.out.println("执行myjob时间:"+ new Date());
  14. }
  15. }