Quartz使用示例总结

任务调度在目前的JAVA应用程序中运用的十分普遍,故掌握QUARTZ是必备的技能

闲话少说,上官网:http://www.quartz-scheduler.org/ 下载最新1.80资源包

commons-logging log4j sff4j 等jar包要添加进去,quartz的jar包则肯定必须

 首先写一个类实现Job接口

Java代码 复制代码  收藏代码Quartz使用示例总结
  1. public class QuartzDemo implements Job{   
  2.   
  3.     @Override  
  4.     public void execute(JobExecutionContext arg0) throws JobExecutionException {   
  5.         System.out.println("执行我.......");   
  6.            
  7.     }   
  8.   
  9.  
public class QuartzDemo implements Job{

        @Override
        public void execute(JobExecutionContext arg0) throws JobExecutionException {
                System.out.println("执行我.......");
                
        }

}

 

然后写上各种测试实例

Java代码 复制代码  收藏代码Quartz使用示例总结
  1. public class Test {   
  2.     private static final SimpleTrigger CronTrigger null;   
  3.   
  4.     public static void main(String[] args){   
  5.     }   
  6.        
  7.     public void test1(){   
  8.           //通过SchedulerFactory来获取一个调度器   
  9.         SchedulerFactory schedulerFactory new StdSchedulerFactory();   
  10.         Scheduler scheduler;   
  11.         try {   
  12.             scheduler schedulerFactory.getScheduler();   
  13.            
  14.            
  15.            
  16.            
  17.         //引进作业程序   
  18.         JobDetail jobDetail    
  19.         new JobDetail("jobDetail-s1", "jobDetailGroup-s1", QuartzDemo.class);   
  20.   
  21.          //new一个触发器   
  22.         SimpleTrigger simpleTrigger    
  23.         new SimpleTrigger("simpleTrigger", "triggerGroup-s1");   
  24.   
  25.   
  26.         //设置作业启动时间   
  27.   
  28.         long ctime System.currentTimeMillis();    
  29.         simpleTrigger.setStartTime(new Date(ctime));   
  30.   
  31.   
  32.         //设置作业执行间隔    
  33.         simpleTrigger.setRepeatInterval(1000);   
  34.   
  35.         //设置作业执行次数   
  36.         simpleTrigger.setRepeatCount(10);   
  37.   
  38.         //设置作业执行优先级默认为5   
  39.         //simpleTrigger.setPriority(10);   
  40.   
  41.   
  42.         //作业和触发器设置到调度器中   
  43.         scheduler.scheduleJob(jobDetail, simpleTrigger);   
  44.            
  45.         //启动调度器   
  46.         scheduler.start();   
  47.         catch (SchedulerException e) {   
  48.             // TODO Auto-generated catch block   
  49.             e.printStackTrace();   
  50.         }   
  51.     }   
  52.        
  53.     public void test2(){   
  54.   
  55.         try    {   
  56.             SchedulerFactory schedFact    new  org.quartz.impl.StdSchedulerFactory();   
  57.             Scheduler sched   schedFact.getScheduler();   
  58.             sched.start();   
  59.             JobDetail jobDetail    new  JobDetail( Income Report ,   
  60.                      Report Generation QuartzDemo.class );   
  61.             jobDetail.getJobDataMap().put( type  FULL );   
  62.             CronTrigger trigger    new  CronTrigger( Income Report ,   
  63.                      Report Generation );   
  64.                   
  65.             trigger.setCronexpression_r( "0 33 16 ?" );   
  66.             sched.scheduleJob(jobDetail, trigger);   
  67.           catch  (Exception e)   {   
  68.             e.printStackTrace();   
  69.            
  70.     }   
  71.        
  72.     public void test3(){   
  73.          //通过SchedulerFactory来获取一个调度器   
  74.       SchedulerFactory schedulerFactory new StdSchedulerFactory();   
  75.       Scheduler scheduler;   
  76.         try {   
  77.             scheduler schedulerFactory.getScheduler();     
  78.       //引进作业程序   
  79.       JobDetail jobDetail    
  80.       new JobDetail("jobDetail-s1", "jobDetailGroup-s1", QuartzDemo.class);   
  81.        //new一个触发器   
  82.       CronTrigger simpleTrigger    
  83.         new CronTrigger("trigger", "group", "job", "group", "16 26/1 8-17 ?");   
  84.      // new SimpleTrigger("simpleTrigger", "triggerGroup-s1");   
  85.   
  86.   
  87.       //设置作业启动时间   
  88.     //Calendar excelCal Calendar.getInstance();   
  89.         //excelCal.add(Calendar.DAY_OF_MONTH, 1);   
  90.         ///excelCal.set(Calendar.HOUR_OF_DAY, 16);   
  91.         //excelCal.set(Calendar.SECOND, 0);   
  92.         //excelCal.add(Calendar.MINUTE, 9);   
  93.      // long ctime System.currentTimeMillis();    
  94.      // simpleTrigger.setStartTime(excelCal.getTime());   
  95.       //设置作业执行间隔    
  96.      // simpleTrigger.setRepeatInterval(1000);   
  97.       //设置作业执行次数   
  98.      // simpleTrigger.setRepeatCount(10);   
  99.       //设置作业执行优先级默认为5   
  100.       //simpleTrigger.setPriority(10);   
  101.            
  102.       //作业和触发器设置到调度器中   
  103.       scheduler.scheduleJob(jobDetail, simpleTrigger);   
  104.          
  105.       //启动调度器   
  106.       scheduler.start();   
  107.         catch (SchedulerException e) {   
  108.             // TODO Auto-generated catch block   
  109.             e.printStackTrace();   
  110.         catch (ParseException e) {   
  111.             // TODO Auto-generated catch block   
  112.             e.printStackTrace();   
  113.         }   
  114.            
  115.            
  116.     }   
  117.        
  118.  
public class Test {
    private static final SimpleTrigger CronTrigger = null;

        public static void main(String[] args){
    }
        
        public void test1(){
                  //通过SchedulerFactory来获取一个调度器
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler;
                try {
                        scheduler = schedulerFactory.getScheduler();
                
        
        
        
        //引进作业程序
        JobDetail jobDetail = 
        new JobDetail("jobDetail-s1", "jobDetailGroup-s1", QuartzDemo.class);

         //new一个触发器
        SimpleTrigger simpleTrigger = 
        new SimpleTrigger("simpleTrigger", "triggerGroup-s1");


        //设置作业启动时间

        long ctime = System.currentTimeMillis(); 
        simpleTrigger.setStartTime(new Date(ctime));


        //设置作业执行间隔 
        simpleTrigger.setRepeatInterval(1000);

        //设置作业执行次数
        simpleTrigger.setRepeatCount(10);

        //设置作业执行优先级默认为5
        //simpleTrigger.setPriority(10);


        //作业和触发器设置到调度器中
        scheduler.scheduleJob(jobDetail, simpleTrigger);
        
        //启动调度器
        scheduler.start();
                } catch (SchedulerException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
        
        public void test2(){

                try    {
            SchedulerFactory schedFact  =   new  org.quartz.impl.StdSchedulerFactory();
            Scheduler sched  =  schedFact.getScheduler();
            sched.start();
            JobDetail jobDetail  =   new  JobDetail( " Income Report " ,
                     " Report Generation " , QuartzDemo.class );
            jobDetail.getJobDataMap().put( " type " ,  " FULL " );
            CronTrigger trigger  =   new  CronTrigger( " Income Report " ,
                     " Report Generation " );
               
            trigger.setCronexpression_r( "0 33 16 * * ?" );
            sched.scheduleJob(jobDetail, trigger);
        }   catch  (Exception e)   {
            e.printStackTrace();
        } 
        }
        
        public void test3(){
                 //通过SchedulerFactory来获取一个调度器
      SchedulerFactory schedulerFactory = new StdSchedulerFactory();
      Scheduler scheduler;
                try {
                        scheduler = schedulerFactory.getScheduler();  
      //引进作业程序
      JobDetail jobDetail = 
      new JobDetail("jobDetail-s1", "jobDetailGroup-s1", QuartzDemo.class);
       //new一个触发器
      CronTrigger simpleTrigger = 
        new CronTrigger("trigger", "group", "job", "group", "16 26/1 8-17 * * ?");
     // new SimpleTrigger("simpleTrigger", "triggerGroup-s1");


      //设置作业启动时间
        //Calendar excelCal = Calendar.getInstance();
                //excelCal.add(Calendar.DAY_OF_MONTH, 1);
                ///excelCal.set(Calendar.HOUR_OF_DAY, 16);
                //excelCal.set(Calendar.SECOND, 0);
                //excelCal.add(Calendar.MINUTE, 9);
     // long ctime = System.currentTimeMillis(); 
     // simpleTrigger.setStartTime(excelCal.getTime());
      //设置作业执行间隔 
     // simpleTrigger.setRepeatInterval(1000);
      //设置作业执行次数
     // simpleTrigger.setRepeatCount(10);
      //设置作业执行优先级默认为5
      //simpleTrigger.setPriority(10);
        
      //作业和触发器设置到调度器中
      scheduler.scheduleJob(jobDetail, simpleTrigger);
      
      //启动调度器
      scheduler.start();
                } catch (SchedulerException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                
                
        }
        
}

 需要注意的几点是经常会出现org.quartz.core.ErrorLogger : An error occured instantiating job to be executed.....这种异常,解决办法是

 

Java代码 复制代码  收藏代码Quartz使用示例总结
  1. 1)Job类必须有默认的无参构造方法,当然不覆盖的话类本身就是无参的构造方法   
  2.   
  3. 2)Job的scope必须是Public类型的,因为quartz根据反射机制实例化类,如果不是public的,无法对其暴露   
  4.   
  5. 3)  Job类不能是内部类,原因同上,所以最好单独建类  
1)Job类必须有默认的无参构造方法,当然不覆盖的话类本身就是无参的构造方法

2)Job的scope必须是Public类型的,因为quartz根据反射机制实例化类,如果不是public的,无法对其暴露

3)  Job类不能是内部类,原因同上,所以最好单独建类

 

后附加上我网上搜集的

Java代码 复制代码  收藏代码Quartz使用示例总结
  1. Quartz的配置文件:quartz.properties   
  2. Configure Main Scheduler Properties    
  3. org.quartz.scheduler.instanceName TestScheduler   
  4. org.quartz.scheduler.instanceId one   
  5. Configure ThreadPool    
  6. org.quartz.threadPool.class org.quartz.simpl.SimpleThreadPool   
  7. org.quartz.threadPool.threadCount   
  8. org.quartz.threadPool.threadPriority  
  9. Configure JobStore    
  10. org.quartz.jobStore.misfireThreshold 5000  
  11. org.quartz.jobStore.class org.quartz.simpl.RAMJobStore   
  12.   
  13.   
  14. 附:cronExpression配置说明   
  15.   
  16. 字段   允许值   允许的特殊字符    
  17. 秒    0-59       
  18. 分    0-59       
  19. 小时    0-23       
  20. 日期    1-31       
  21. 月份    1-12 或者 JAN-DEC       
  22. 星期    1-7 或者 SUN-SAT       
  23. 年(可选)    留空, 1970-2099       
  24.   
  25.   
  26. 表达式   意义    
  27. "0 12 ?"    每天中午12点触发    
  28. "0 15 10 *"    每天上午10:15触发    
  29. "0 15 10 ?"    每天上午10:15触发    
  30. "0 15 10 *"    每天上午10:15触发    
  31. "0 15 10 2005"    2005年的每天上午10:15触发    
  32. "0 14 ?"    在每天下午2点到下午2:59期间的每1分钟触发    
  33. "0 0/5 14 ?"    在每天下午2点到下午2:55期间的每5分钟触发     
  34. "0 0/5 14,18 ?"    在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发     
  35. "0 0-5 14 ?"    在每天下午2点到下午2:05期间的每1分钟触发    
  36. "0 10,44 14 WED"    每年三月的星期三的下午2:10和2:44触发    
  37. "0 15 10 MON-FRI"    周一至周五的上午10:15触发    
  38. "0 15 10 15 ?"    每月15日上午10:15触发    
  39. "0 15 10 ?"    每月最后一日的上午10:15触发    
  40. "0 15 10 6L"    每月的最后一个星期五上午10:15触发      
  41. "0 15 10 6L 2002-2005"    2002年至2005年的每月的最后一个星期五上午10:15触发    
  42. "0 15 10 6#3"    每月的第三个星期五上午10:15触发     
  43.   
  44. 特殊字符   意义    
  45.    表示所有值;    
  46.    表示未说明的值,即不关心它为何值;    
  47.    表示一个指定的范围;    
  48.    表示附加一个可能值;    
  49.    符号前表示开始时间,符号后表示每次递增的值;    
  50. L("last")    ("last") "L" 用在day-of-month字段意思是 "这个月最后一天";用在 day-of-week字段, 它简单意思是 "7" or "SAT"。 如果在day-of-week字段里和数字联合使用,它的意思就是 "这个月的最后一个星期几" – 例如: "6L" means "这个月的最后一个星期五". 当我们用“L”时,不指明一个列表值或者范围是很重要的,不然的话,我们会得到一些意想不到的结果。    
  51. W("weekday")    只能用在day-of-month字段。用来描叙最接近指定天的工作日(周一到周五)。例如:在day-of-month字段用“15W”指“最接近这个月第15天的工作日”,即如果这个月第15天是周六,那么触发器将会在这个月第14天即周五触发;如果这个月第15天是周日,那么触发器将会在这个月第16天即周一触发;如果这个月第15天是周二,那么就在触发器这天触发。注意一点:这个用法只会在当前月计算值,不会越过当前月。“W”字符仅能在day-of-month指明一天,不能是一个范围或列表。也可以用“LW”来指定这个月的最后一个工作日。     
  52.    只能用在day-of-week字段。用来指定这个月的第几个周几。例:在day-of-week字段用"6#3"指这个月第3个周五(6指周五,3指第3个)。如果指定的日期不存在,触发器就不会触发。     
  53.    指和calendar联系后计算过的值。例:在day-of-month 字段用“5C”指在这个月第5天或之后包括calendar的第一天;在day-of-week字段用“1C”指在这周日或之后包括calendar的第一天   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值